C++11 向量初始化有什么区别

C++11 向量初始化有什么区别,c++11,initializer-list,C++11,Initializer List,我读过一些关于C++11初始化列表、统一初始化和其他一些的书。但我仍然对它们的区别感到困惑。请检查以下内容以及它们之间的区别。谢谢 std::vector<int> a1({1, 2, 3, 4}); // this is initialize list a object, then copy-constructor? std::vector<int> a2{1, 2, 3, 4}; // this is initialize list std::vector<

我读过一些关于C++11初始化列表、统一初始化和其他一些的书。但我仍然对它们的区别感到困惑。请检查以下内容以及它们之间的区别。谢谢

std::vector<int> a1({1, 2, 3, 4});
// this is initialize list a object, then copy-constructor? 

std::vector<int> a2{1, 2, 3, 4};
// this is initialize list

std::vector<int> a2{{1, 2, 3, 4}};
// what is this?
std::向量a1({1,2,3,4});
//这是初始化列表对象,然后复制构造函数?
std::向量a2{1,2,3,4};
//这是初始化列表
std::向量a2{{1,2,3,4};
//这是什么?
std::vector a1({1,2,3,4});
std::向量a2{1,2,3,4};
std::向量a2{{1,2,3,4};
所有3行执行相同的操作:


编译器创建一个
std::initializer\u list
,然后将其传递给
std::vector
的构造函数,该构造函数接受一个
std::initializer\u list

你能更具体地说明你认为你理解的内容和对你来说没有意义的内容吗?没有细节,任何答案看起来都和你已经读过的其他东西一样。如果这些对你没有帮助,那么任何一般性的答案也对你没有帮助。因此,为了得到一个有用的答案,您必须更好地描述您的困难。我认为问题是,当临时
初始值设定项列表
传递给
向量
的构造函数时,是否会发生复制构造。我认为这是一个移动。@isarandi因为
std::initializer\u list
不拥有它的内容,正如它所说的“可以实现为一对指针或指针和长度”,std::initializer\u list
的移动和复制很可能是完全相同的操作(很少的指针/整数赋值)。
std::vector<int> a1({1, 2, 3, 4});

std::vector<int> a2{1, 2, 3, 4};

std::vector<int> a2{{1, 2, 3, 4}};