在第57页的Koenig和Moo的Accelerated C ++一书中,它们提供了如下所示的函数,它返回in
。这样做的原因是指示尝试输入是否成功(第55页)。但是,in
通过引用传递为函数的参数之一。那么你不能通过查看原始对象来获得istream的状态吗?
// read homework grades from an input stream into a `vector<double>'
istream& read_hw(istream& in, vector<double>& hw)
{
if (in) {
// get rid of previous contents
hw.clear();
// read homework grades
double x;
while (in >> x)
hw.push_back(x);
// clear the stream so that input will work for the next student
in.clear();
}
return in;
}
答案 0 :(得分:8)
它允许你编写流畅的界面,比如
read_hw(cin, hw).read_something_else(cin, x).blah_blah(cin, y)
因为每个方法调用都返回对istream
对象的引用,所以它可以用于链接方法调用。
事实上,当你做
时会发生什么cin >> a >> b;
每个operator>>
函数调用都会返回对流的引用,因此可以对其进行链接。
它还允许您从istream
对象idiomatic way in C++循环和读入,例如
while (read_hw(cin, hw)) {
do_something_with_hw(hw);
}
答案 1 :(得分:1)
BLUF:是的。
更长版本:通过返回in
信号给实现者,他们传入的内容也是 out 参数。这是一个惯例。如果您的函数仅通过返回值进行通信,则可以在形式参数列表中区分您的输入。
您不需要这样做,但如果您通常只返回一个值,那么它会有所帮助。然后,您不必查阅每个电话的文档。按照惯例,你知道&#34;我得到的东西表明状态。&#34;
我的2c,这种做法很难映射到许多现实世界的编码示例,没有一致性,它不具有吸引力或有用。我一般不会使用它。作为一个相关的例子,Go和Lua代码都允许返回多个值。对于语言而言,能够将第一个返回值作为成功执行函数的结果更自然,第二个值是&#34; status&#34;结果。好的,坏的等等。