我可以使用' ='来初始化std :: vector。感谢操作员超载?

时间:2017-05-24 02:17:58

标签: c++ c++11 vector initialization operator-overloading

我注意到在C ++ 11中我可以通过以下方式初始化一个向量(不仅仅是这些):

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

我想在第一行中使用了以下构造函数:

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

我怀疑第二行是使用相同的构造函数还是运算符重载&#39; =&#39;参与其中。

这里http://en.cppreference.com/w/cpp/language/list_initialization,它说

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

被视为initializer_list,对吧?在这种情况下,超载&#39; =&#39;不应该参与吗?

1 个答案:

答案 0 :(得分: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