[英]Initialization by user-defined constructor
考慮以下程序:
#include <iostream>
struct A
{
A(int, int){ std::cout << "A(int, int)" << std::endl; }
};
A a(4,4);
A b{4,4};
A c({4,4});
int main(){ }
輸出:
A(int, int)
A(int, int)
A(int, int)
我對a
, b
和c
初始化之間有區別嗎? 任何主題都直接初始化。
A a(4,4);
沼澤標准直接初始化 。
A b{4,4};
沼澤標准直接列表初始化 。 由於A
沒有initializer_list
構造函數,因此最終完成與上述相同的操作。 絕不會構造或銷毀std::initializer_list
對象。
A c({4,4});
這從A
臨時對象直接初始化 c
,而該臨時對象又從braced-init-list {4, 4}
復制列表初始化 。 請注意,如果A::A(int, int)
是explicit
,則此方法將不起作用,因為在這種情況下,復制列表初始化將格式錯誤,並且您將無法調用任何可行的構造函數。 臨時結構的建造和破壞通常可以避免。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.