我很好奇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
我不在乎“实际意义”。这显然不是你测试的代码。 –