gpt4 book ai didi

c++ - 为什么c++中的函数可以返回栈值

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:11 25 4
gpt4 key购买 nike

考虑以下程序:

class C {
...
};

const C f() {
C ret;
cout << &ret << endl;
return ret;
}

int main() {
C value = f();
cout << &value << endl;
}


result: // note the address are the same
0x7ffdd24b26e0
0x7ffdd24b26e0

函数 f() 中的变量“ret”和变量“value”具有相同的内存地址,因此“value”似乎不是“ret”的拷贝。变量“ret”是一个堆栈变量,因此它应该在 f() 返回后失效。那么,为什么 C++ 允许在函数内部返回堆栈值?

g++ 版本:

g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

最佳答案

ret 和 value 的地址相同的原因是所谓的返回值优化(RVO)。这意味着在这种情况下不会执行复制。但是请注意,您不能依赖它,因为它不一定会发生(尽管 C++17 [至少当前草案] 会改变)。

https://en.wikipedia.org/wiki/Return_value_optimization

关于c++ - 为什么c++中的函数可以返回栈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38213136/

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