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...";