c ++使用void或std :: ostream&类型的函数打印?

时间:2016-02-22 23:33:55

标签: c++ printing void ostream

我想知道定义具有std::ostream &返回类型的函数的原因和优点与仅打印值的void函数相反。例如,如果我想打印一个字符串文字,我可以通过以下两种方式来实现:

std::ostream& print1(std::ostream &os){
     os << "print this message";
     return os;
}
print1(std::cout);

void print2(){
     std::cout << "print this message";
}
print2();

现在使用像print1这样的函数而不是print2会有什么好处?一个比另一个更有效,还有其他重要的区别吗?

1 个答案:

答案 0 :(得分:0)

第一种形式的优点是你可以组合几个输出函数:

print1(mystream)<<" and that's all !";  

更实际的是,您可以轻松地使用文件输出而不是控制台输出,甚至是字符串输出。如果一切正常,您也可以编写循环/条件检查,就像使用标准输出函数一样。是的,因为当您写入文件时,事情可能会出错(例如磁盘已满):

if (! print1(mystream))
    cout <<" dik full !?"; 

但这只是一种常见做法。你当然可以选择第二种形式:

print2();  // yes, put on what stream, always cout ??
if (! cout) 
    cout <<" oops, unexpected output error...";