任何人都可以向我解釋第五行的輸出嗎?我不明白爲什麼MyClass
對象b
沒有從func
中分配返回對象c
。爲什麼我不能在此代碼中獲得返回值優化?
class MyClass
{
public:
int x;
std::string s;
MyClass(const MyClass &other);
MyClass();
void output();
};
MyClass::MyClass(const MyClass &other): x(2), s("s?") { }
MyClass::MyClass() : x(1), s("s1") { }
void MyClass::output() { cout << x << " " << s << endl; }
MyClass func(MyClass c) //MyClass c = Myclass(a)
{
cout << "2. in func: "; c.output();
c.s = "s2";
cout << "3. in func: "; c.output();
return c;
}
int main()
{
MyClass a;
cout << "1. "; a.output();
MyClass b = func(a);
cout << "4. "; a.output();
cout << "5. "; b.output();
}
輸出是:
1. 1 s1
2. in func: 2 s?
3. in func: 2 s2
4. 1 s1
5. 2 s?
我明白的地方做線來自1-4,但我沒有在最後知道爲什麼,在MyClass b.s
有s?
值不是s2
。是否因爲在func
範圍內創建了const
對象?
編輯: 我知道,當MyClass c
對象的func
範圍內初始化拷貝構造函數被調用,但返回的對象是如何不分配給b
?
它不是S2因爲'MyClass的B = FUNC(一);'要求'B'它初始化拷貝構造字符串成員?' –
我想你可能需要澄清爲什麼你對輸出感到驚訝。你的問題比你可能意識到的更微妙,並且沒有任何答案能夠解決這個問題。提示:另一個標題可能是「爲什麼我不能在此代碼中獲得*返回值優化*?」 – juanchopanza
@juanchopanza完成了,謝謝 –