[英]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.