我很好奇C++ 11列表初始化。我定義了一個類:爲什麼在這種情況下複製構造函數匹配?
class base{
base() { cout << "default ctor" << endl;}
base(std::initiazer_list<base> il) { cout << "list initialization << endl;}
base(const base &rhs) { cout << "copy ctor" << endl;}
}
在主函數中,我初始化兩個對象來測試我的類。
int main()
{
base obj{}; // default ctor
base obj2{obj}; // copy ctor
}
我從「有效的現代C++」調用使用列表的初始化語法強烈希望重載採取std::initializer_list
學習。 因此,就我而言,我認爲第二個ctor會被調用,但是第三個調用會被調用。
你能解釋一下爲什麼嗎?
首先,這不是真正的代碼。其次,你的編譯器/版本是什麼?這方面的規則經歷了一些近期的變化。 –
我知道我的代碼沒有一些實際意義。我在Visual Studio 2017RC中測試我的代碼。 – linyuwang
我不在乎「實際意義」。這顯然不是你測試的代碼。 –