假設我有這樣的假設,奇數和不直觀的情況複製省略導致不同的結果
#include <iostream>
struct A
{
A()
{
member = 1;
}
A(const A &)
{
member = 2;
}
int member;
};
int main()
{
A a = A();
A b = a;
std::cout << a.member << std::endl;
std::cout << b.member << std::endl;
return 0;
}
我知道,複製省略意味着a
將只是默認構造函數初始化和B就與副本進行初始化構造函數。我也知道(至少在gcc上),你可以告訴編譯器不要做任何複製elision。
我的問題是有一些方法讓編譯器不使用複製elision 只爲這個類?
我意識到在任何實際情況下的答案都是99.9%的時間找到其他方式,而我沒有其中一個0.01%的情況(這是一個實際的假設問題,而不是「假設的問題「)
您有** As-If **規則的鏈接或定義嗎?好奇的頭腦想知道! – 2012-03-31 16:43:51
我知道你可以用這個選項關閉整個功能,我真的很想知道是否可以根據具體情況關閉它,但是我想沒有其他人真的不需要它,實現該功能只會允許編寫錯誤的代碼,並且實際上不會使任何優秀的代碼受益。 – SirGuy 2012-03-31 16:47:17
@EmileCormier:檢查更新後的答案。希望那個坐立不安的好奇心:) – 2012-03-31 16:49:05