我需要向 ostream 发送一个 char 数组。假设我有以下打印功能:
版本 1:
void print(ostream &out, const char *str, unsigned len)
{
out << string(str,len);
}
版本 2:
void print(ostream &out, const char *str, unsigned len)
{
out.write(str,len);
}
以上两个版本都在一定程度上起作用。版本 1 看起来效率较低,因为它会创建一个额外的字符串对象(导致内存分配和数据复制)。
然而,版本 2 消除了格式化的可能性。在以下示例中,版本 1 效果很好(意味着 io 操纵器成功将宽度设置为 10 并将其应用于下一个输出字段):
out << setw(10);
print(out,s,slen);
有没有办法保持 V1 中的功能,但无需为分配/内存复制支付额外费用?