[英]Initialization with empty curly braces
第一次嘗試,一切正常:
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,在這兩種情況下都會使用默認初始化而不會出現diffences。
從列表初始化:
否則,如果braced-init-list為空且T是具有默認構造函數的類類型,則執行值初始化。
從值初始化:
如果T是沒有默認構造函數的類類型,或者是用戶提供或刪除的默認構造函數,則該對象是默認初始化的;
我已經讀過cppreference,在這兩種情況下都會使用默認初始化而不會出現diffences。
不,他們不一樣。 確切地說, Base b{};
是直接列表初始化 ,而Base b_one = {};
是copy-list-initialization ; 對於copy-list-initialization,只能調用非explicit
構造函數。
(強調我的)
direct-list-initialization( 考慮顯式和非顯式構造函數 )
copy-list-initialization(考慮顯式和非顯式構造函數,但只能調用非顯式構造函數 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.