Gus*_*ava 4 c++ constructor initialization explicit c++11
第一次尝试,一切正常:
class Base {
public:
Base() {std::cout << "default ctor!\n"; }
};
...
Base b{};
Base b_one = {};
Run Code Online (Sandbox Code Playgroud)
另一种实现方式(添加explicit):
class Base {
public:
explicit Base() {std::cout << "default ctor!\n"; }
};
...
Base b{};
Base b_one = {}; // error! Why?
Run Code Online (Sandbox Code Playgroud)
我已经读过cppreference,在这两种情况下都会使用默认初始化而不会出现diffences.
从列表初始化:
否则,如果braced-init-list为空且T是具有默认构造函数的类类型,则执行值初始化.
从值初始化:
如果T是没有默认构造函数的类类型,或者是用户提供或删除的默认构造函数,则该对象是默认初始化的;
我已经读过cppreference,在这两种情况下都会使用默认初始化而不会出现diffences.
不,他们不一样.确切地说,Base b{};是直接列表初始化,Base b_one = {};而是复制列表初始化 ; 对于copy-list-initialization,只能explicit调用非构造函数.
(强调我的)
direct-list-initialization(考虑显式和非显式构造函数)
copy-list-initialization(考虑显式和非显式构造函数,但只能调用非显式构造函数)
| 归档时间: |
|
| 查看次数: |
664 次 |
| 最近记录: |