从朋友函数返回本地变量的引用

Returning reference of a local variable from a friend function

本文关键字:变量 引用 朋友 函数 返回      更新时间:2023-10-16

我遇到了一个示例,以使<<>> 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语句是故意的。

预先感谢。

我认为OS是一个局部变量(如果不是,请纠正我,以某种方式)。

不是真的。os是本地参考,是的。但这与非本地对象绑定。

并且由于它是一个非const lvalue参考,必须绑定到其寿命超过函数调用的对象。因此,将该引用绑定到从函数返回的一个引用是完全可以的。没有什么最终会悬空。

实际上,这就是您必须采取的措施来启用链式呼叫的功能:

std::cout << foo << bar << baz;

只是一堆函数调用:

operator<<(operator<<(operator<<(std::cout, foo), bar), baz);