我注意到在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;不应该参与吗?
答案 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