c++ 使用 void 或 std::ostream & 类型的函数来打印?
c++ using function of type void or std::ostream & to do prints?
我想知道使用 std::ostream &
return 类型定义函数的原因和优势是什么,而不是仅用于打印值的 void 函数。例如,如果我想打印一个字符串文字,我可以通过以下两种方式进行:
std::ostream& print1(std::ostream &os){
os << "print this message";
return os;
}
print1(std::cout);
或
void print2(){
std::cout << "print this message";
}
print2();
现在,与 print2
相比,使用 print1
这样的函数有什么优势?一个比另一个更有效,还有其他重要的区别吗?
第一种形式的优点是您可以组合多个输出函数:
print1(mystream)<<" and that's all !";
更实用的是,您可以轻松地使用文件输出而不是控制台输出,甚至字符串输出。您还可以编写 loops/conditions 检查是否一切正常,就像您对标准输出函数所做的那样。是的,因为当您写入文件时,可能会出错(例如磁盘已满):
if (! print1(mystream))
cout <<" dik full !?";
但这只是一种常见的做法。您当然也可以选择第二种形式:
print2(); // yes, put on what stream, always cout ??
if (! cout)
cout <<" oops, unexpected output error...";
我想知道使用 std::ostream &
return 类型定义函数的原因和优势是什么,而不是仅用于打印值的 void 函数。例如,如果我想打印一个字符串文字,我可以通过以下两种方式进行:
std::ostream& print1(std::ostream &os){
os << "print this message";
return os;
}
print1(std::cout);
或
void print2(){
std::cout << "print this message";
}
print2();
现在,与 print2
相比,使用 print1
这样的函数有什么优势?一个比另一个更有效,还有其他重要的区别吗?
第一种形式的优点是您可以组合多个输出函数:
print1(mystream)<<" and that's all !";
更实用的是,您可以轻松地使用文件输出而不是控制台输出,甚至字符串输出。您还可以编写 loops/conditions 检查是否一切正常,就像您对标准输出函数所做的那样。是的,因为当您写入文件时,可能会出错(例如磁盘已满):
if (! print1(mystream))
cout <<" dik full !?";
但这只是一种常见的做法。您当然也可以选择第二种形式:
print2(); // yes, put on what stream, always cout ??
if (! cout)
cout <<" oops, unexpected output error...";