gpt4 book ai didi

c++ - 返回对右值临时的 const 左值引用?为什么这行得通?

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

为什么这段代码有效?它每次都打印出 60。首先,const thingy& 表示该函数返回对已存在变量的引用,而不是无名构造。其次,当函数返回时,那个临时的不应该死掉,从而创建一个空引用吗?我正在使用 OSX 上最新的 GCC 版本...有人可以向我解释为什么这有效吗?

#include <iostream>

using namespace std;

struct thingy {
double things;
double moreThings;
double evenMoreThings;
};

const thingy& getThingy() {
return {60, 60, 60};
}

int main() {
cout << getThingy().evenMoreThings << endl;
}

如果这行得通,那为什么不行呢?

const thingy& getThingy() {
thingy t{60, 60, 60};
return t;
}

最佳答案

根据 C++ 标准,您的两个选项都不需要工作,因此不应假定任何一个都必须在任何特定情况下工作。

编译器细节导致第一个选项在您直接返回值的地方工作。

理想情况下,您应该按值返回 (thingy getThingy();),以确保兼容性。任何值得您花时间的编译器仍将对此应用返回值优化,从而避免调用复制构造函数并仍然允许必要的效率。

关于c++ - 返回对右值临时的 const 左值引用?为什么这行得通?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872383/

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