gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:46:45 28 4
gpt4 key购买 nike

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

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

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com