可能重複:
What’s the motivation behind having copy and direct initialization behave differently?爲什麼複製初始化的方式是?爲什麼需要複製構造函數?
而且通過拷貝初始化,我的意思是像這樣:
struct MyStruct
{
MyStruct(int) {}
MyStruct(const MyStruct&) {}
};
MyStruct s = 5; // needs *both* the int and copy constructor
儘管在C++多年編程,我從來沒有意識到上面的代碼需要複製構造函數(感謝jogojapan)。臨時性一直被忽略,因此我甚至不知道它甚至存在(至少在膚淺的層面上,儘管它已被優化),直到它被指出來。
經過大量的谷歌搜索,我瞭解了它是如何工作的。我的問題是爲什麼是它的方式?
爲什麼沒有這個標準使得上面的例子不需要拷貝構造函數呢?是否有一些特定的案例/例子表明在這種類型的初始化中需要複製構造函數很重要?
沒有一個體面的解釋爲什麼事情是他們的方式,我只是把它看作是一件惱人的神器,但我寧願不知道是否有什麼重要的東西我失蹤了。
似乎需要拷貝構造函數同名;實際上它是[不叫](http://ideone.com/35fjAD)。 – iammilind
@iammilind:無需調用是由於** Copy elision **,但複製構造函數需要可訪問。基本上,這意味着標準*允許*複製構造函數被調用,它必須**能得到的。優化不是標準保證事實上它與標準適應的相反。 –
@JesseGood:謝謝你。看起來這幾乎是重複的。那種令人沮喪的回答在另一個問題上沒有很好的答案... – Cornstalks