2017-05-24 30 views
1

我注意到,在C++ 11 I可以初始化通過以下方式的載體(不只是這些):感謝操作符重載,可以使用'='初始化std :: vector嗎?

std::vector<int> v1{0,1,2}; 
std::vector<int> v2={3,4,5}; 

我想,在第一行下面的構造用於:

vector(std::initializer_list<T> init, 
     const Allocator& alloc = Allocator()); 

我的疑問是第二行是否使用相同的構造函數,或者涉及'='的操作符重載。

這裏http://en.cppreference.com/w/cpp/language/list_initialization,它說,

T object = {arg1, arg2, ...}; 

被認爲是一個initializer_list,對不對?在這種情況下,'='的重載不應該涉及對嗎?

+2

是的,這是列表初始化,從您鏈接的文檔情況下,#10。 – dasblinkenlight

+0

是否意味着'='的重載不參與? – Christian

+1

@Christian是的,它沒有涉及。 –

回答

3

是的,在這裏使用相同的構造函數構造對象。

std::vector<int> v1{0,1,2};direct list intialization是,而std::vector<int> v2={3,4,5};copy list intialization,兩者都是初始化,這意味着適當的構造將被調用以構建std::vector。它們不是分配,與賦值操作符無關(即operator=)。

在另一方面,這是分配:

std::vector<int> v2; // default initialization 
v2 = {3,4,5};  // this is assignment; 
        // std::vector::operator=(std::initializer_list<T>) will be invoked 
相關問題