C++ 按常量值返回是否会影响返回值优化?
以函数为例C++ 按常量值返回是否会影响返回值优化?,c++,return-value-optimization,rvo,C++,Return Value Optimization,Rvo,以函数为例 const std::string f() { return "hello"; } 电话呢 std::string x = f(); 无论值返回类型是否应为const,返回值为const这一事实是否会阻止编译器执行返回值优化 我对RVO的理解是,返回的对象直接构造到函数外部的变量中。但是,如果返回类型是const T,这与T不同,那么RVO会被阻止吗?我知道你说过“不管[…]const与否”,链接问题(和其他问题)中的答案在现代和旧时代都会重复这个特定问题。@Rapptz
const std::string f()
{
return "hello";
}
电话呢
std::string x = f();
无论值返回类型是否应为const,返回值为const这一事实是否会阻止编译器执行返回值优化
我对RVO的理解是,返回的对象直接构造到函数外部的变量中。但是,如果返回类型是
const T
,这与T
不同,那么RVO会被阻止吗?我知道你说过“不管[…]const与否”,链接问题(和其他问题)中的答案在现代和旧时代都会重复这个特定问题。@Rapptz我认为这不是重复。您发现的问题非常正确地回答了现在函数不应该返回const std::string
。这个问题不是你是否应该这样做,而是如果你这样做了具体会发生什么。这是一个相关的问题,但不是一个重复的IMO。@hvd我不相信这个问题的答案会增加任何价值,因为链接的问题回答了事件的最终状态,也就是说,它禁止移动语义,也禁止RVO,因为必须复制。@Rapptz你是说链接的问题有答案,说明在这种情况下禁止RVO?@Rapptz换句话说,链接的问题不回答我的问题。