我遇到了一个在 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 是一个局部变量(如果不是,请纠正我)。
我不知道这段代码是否真的有效,但在网络上的大多数引用资料中,我发现了类似的实现。
注意:包含头文件和使用命名空间标准语句是有意省略的。
提前致谢。
最佳答案
I think os is a local variable (correct me if it is not, somehow).
事实并非如此。 os
是本地引用,没错。但它绑定(bind)到非本地对象。
因为它是一个非常量左值引用,所以它必须绑定(bind)到一个对象,该对象的生命周期超过了函数调用。因此将该引用绑定(bind)到从函数返回的引用是完全可以的。没有什么会最终悬空。
事实上,这就是启用函数链式调用所必须执行的操作:
std::cout << foo << bar << baz;
只是一堆函数调用:
operator<<(operator<<(operator<<(std::cout, foo), bar), baz);
关于c++ - 从友元函数返回局部变量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47618053/