我遇到了一个重载<<<<<<<<和>> C ++中的运算符。然而,有一个疑问,因为实现它的所有示例似乎都返回对局部变量的引用
class Date
{
int mo, da, yr;
public:
Date(int m, int d, int y)
{
mo = m; da = d; yr = y;
}
friend ostream& operator<<(ostream& os, const Date& dt);
};
ostream& operator<<(ostream& os, const Date& dt)
{
os << dt.mo << '/' << dt.da << '/' << dt.yr;
return os;
}
int main()
{
Date dt(5, 6, 92);
cout << dt;
}
我认为os是一个局部变量(如果不是,请纠正我)。
我不知道这段代码是否真的有效,但在网上的大多数参考资料中,我都找到了类似的实现。
注意:有意省略包含头文件和使用命名空间std语句。
提前致谢。
答案 0 :(得分:3)
我认为os是一个局部变量(如果不是,请纠正我)。
这不是真的。 os
是本地参考,这是真的。但它与非本地对象绑定。
由于它是一个非const左值引用,它必须绑定到一个寿命超过函数调用的对象。因此绑定对函数返回的引用是完全可以的。什么都不会结束。
事实上,这是启用链式调用函数所必须做的事情:
std::cout << foo << bar << baz;
只是一堆函数调用:
operator<<(operator<<(operator<<(std::cout, foo), bar), baz);