[英]Am I testing the Return Value Optimization correctly?
考虑:
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)的帖子没有执行返回值优化,但似乎没有一个是关于这种特殊情况的)?
正如评论中所暗示的,这与结构的大小有关。 如果结构适合寄存器,则地址可能会更改。
一旦你创建了一个更大的结构,地址就保持不变。
请注意,保证会发生复制省略: https : //stackoverflow.com/a/48881336/461597
#include <iostream>
using std::cout;
using std::endl;
struct Measures {
int age;
float weight;
};
struct BigMeasures {
Measures m;
int foo, bar, moo, mar;
};
Measures foo() {
Measures res;
cout << &res << endl;
return res;
}
BigMeasures bar() {
BigMeasures res;
std::cout << &res << "\n";
return res;
}
int main() {
std::cout << "Small Measures:\n";
Measures m = foo();
cout << &m << endl;
std::cout << "Big Measures:\n";
BigMeasures bm = bar();
std::cout << &bm << "\n";
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.