設thing
爲默認構造和移動構造類型。考慮以下兩個初始化:默認初始化與默認構建值的初始化初始化
thing t1; // (1)
auto t2 = thing{}; // (2)
(1)默認構造
t1
。(2)默認構建
thing
類型的臨時表並將其移至t2
。
在何種情況下,(2)中的移動將被消除?
在現代風格的C++初始化中,類型通常根本不出現或出現在右側。例如:
auto copy = vec; // Type doesn't appear
auto p_derived = std::make_unique<derived>(); // Type appears naturally on the right
// Putting the type on the right here makes it explicit that the upcast is intended
auto p_base = std::unique_ptr<base>{ std::make_unique<derived>() };
使用(2)將與這些樣式一致,而使用(1)則不會。
另外,當使用(1)long typename時,變量名稱顯示在右側。當使用(2)時,無論類型名稱的長度如何,變量名稱同樣適用。
這是否意味着(2)爲了一致性而優於(1)?
沒有關係,反正複製elsiion。 –