从朋友函数返回本地变量的引用
Returning reference of a local variable from a friend function
我遇到了一个示例,以使<<>> 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);
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 多个"常量引用"变量可以共享同一个内存吗?
- 如果非动态变量被指针引用,何时超出范围?
- 在 c++ 中将变量作为结构构造函数中的引用传递
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 为什么C++可以使用未初始化的成员变量(引用或指针 *NOT 值复制*)来初始化其父类的成员变量
- 地址运算符是否返回变量引用的对象的地址
- 未在另一个函数中设置变量引用的问题
- 英特尔样式内联程序集和 AT&T 样式中的变量引用,C++
- 将成员变量引用为类成员
- 从静态变量引用非静态变量会使非静态变量先于静态变量进行析构函数
- 何时解析 C++11 lambda 表达式中的变量引用
- 堆栈/堆变量的变量/引用名称或类型存储在内存中的位置
- C++强制对变量引用进行编译优化,使之成为直接的
- Boost变量引用和相等比较
- 使复制的成员引用变量引用副本的成员,而不是原始成员的成员
- 为什么要在Java中生成变量引用数组
- 捕获和调试对移动lambda内部局部变量引用的无效使用
- 在变量初始化后更改变量引用
- 从'C'程序中提取变量定义和变量引用