为什么要返回通过引用传递给 C++ 函数的对象?
Why return an object passed by reference to the function in C++?
在Koenig和Moo的加速C++书第57页中,他们提供了如下所示的函数,该函数返回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;
}
它允许您编写流畅的界面,如下所示
read_hw(cin, hw).read_something_else(cin, x).blah_blah(cin, y)
由于每个方法调用都返回对istream
对象的引用,因此它可用于链接方法调用。
事实上,当你这样做时,就会发生这种情况。
cin >> a >> b;
每个operator>>
函数调用都返回对流的引用,因此可以链接流。
它还允许您以C++惯用的方式循环和读入istream
对象,例如
while (read_hw(cin, hw)) {
do_something_with_hw(hw);
}
BLUF:是的。
更长的版本:通过返回in
它向实现者发出信号,表明他们传入的内容也是一个out参数。这是一个惯例。如果您的函数仅通过返回值进行通信,则可以与形式参数列表中的输入区分开来。
您不需要这样做,但如果您通常只返回单个值,这将很有帮助。然后,您不必查阅每个调用的文档。按照惯例,你知道"我得到的东西表明了地位"。
我的 2c,这种做法映射到许多现实世界的编码示例很差,如果没有一致性,它就没有吸引力或有用性。我一般不使用它。作为一个相关的例子,Go 和 Lua 代码都允许返回多个值。对于语言,更自然的是,第一个返回值是成功执行函数的结果,第二个值是结果的"状态"。好的,不好的,等等。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗