c++ - 使用行为不同的引用返回 tmp

标签 c++ reference

我知道使用引用返回临时变量是行不通的,因为临时对象在函数终止后丢失了,但是下面这段代码是有效的,因为返回的临时变量被分配给了另一个对象。

我假设临时对象在函数调用行后被销毁。如果是这样,为什么这不适用于这种方法链接?

Counter& Counter::doubler()
{ 
   Counter tmp;
   tmp.i = this->i * 2;
   return tmp;
}

int main()
{
    Counter d(2);
    Counter d1, d2;
    d1 = d.doubler();                            // normal function call
    std::cout << "d1=" << d1.get() << std::endl; // Output : d1=4 
    d2 = d.doubler().doubler();                  // Method chaining
    std::cout << "d2=" << d2.get() << std::endl; // Output : d2=0 
    return 0;
}

最佳答案

如果函数返回对局部对象的引用,则该对象将在函数返回后立即销毁(与局部对象一样)。它不会持续到函数调用行的末尾。

在对象被销毁后访问对象将产生不可预知的结果。对于“工作”的某些定义,有时它可能有效,有时可能无效。只是不要这样做。

关于c++ - 使用行为不同的引用返回 tmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968226/

相关文章:

c++ - 如何填补 OpenCV 中二进制图像中的空白?

c++ - 动态选择模板特化

java - 更改增强 for 循环中迭代项的引用

java - 采用字符串的不可见 ActiveX

c++ - 条件断点 : This expression has side effects and will not be evaluated

c++ - iostream 的问题,我的输出 endl 是小方 block

Java - 将 null 作为参数传递给 print()

c++ - 为什么我不能制作引用 vector ?

r - data.table join 然后将列添加到现有的 data.frame 中,无需重新复制

C++ 实例 VS 指针 VS 引用