【发布时间】:2020-05-08 08:07:24
【问题描述】:
考虑:
struct Measures {
char name[128]; // added in response to comments
int age;
float weight;
};
Measures foo() {
Measures res;
cout << &res << endl;
return res;
}
int main() {
Measures m = foo();
cout << &m << endl;
system("pause");
return 0;
}
我在 Visual Studio 中运行这段代码得到的输出是:
004FFA30
004FFB28
我是否从两个地址不同的事实得出正确的结论,即未执行返回值优化?如果是这样,为什么在这种情况下不执行(我发现几个处理 Visual Studio 2017(版本 15.9.14)的帖子没有执行返回值优化,但似乎都不是关于这种特殊情况的)?
【问题讨论】:
-
哪个版本的虚拟工作室?
-
您是在测试调试版本还是发布(优化)版本?
-
您可能会看到这个stackoverflow.com/questions/48879226/… - 尝试将
char b[128];成员添加到您的结构中。它肯定不适合寄存器,所以你会知道是否是这种情况。 -
这是 NRVO,不是普通的 RVO。
-
@StoryTeller-UnslanderMonica 我做到了。输出中的地址仍然不同。
标签: c++ return-value-optimization