【发布时间】:2018-08-15 15:51:54
【问题描述】:
第一次尝试,一切正常:
class Base {
public:
Base() {std::cout << "default ctor!\n"; }
};
...
Base b{};
Base b_one = {};
另一种实现方式(加explicit):
class Base {
public:
explicit Base() {std::cout << "default ctor!\n"; }
};
...
Base b{};
Base b_one = {}; // error! Why?
我在 cppreference 上读到,在这两种情况下都将使用默认初始化并且没有差异。
从列表初始化:
否则,如果braced-init-list为空且T是具有默认构造函数的类类型,则执行值初始化。
从值初始化:
如果 T 是没有默认构造函数的类类型,或者具有用户提供或删除的默认构造函数,则该对象是默认初始化的;
【问题讨论】:
标签: c++ c++11 constructor initialization explicit