簡體   English   中英

用空花括號初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM