C++ 这个std::vector构造函数中发生了什么?

C++ 这个std::vector构造函数中发生了什么?,c++,c++11,vector,constructor,C++,C++11,Vector,Constructor,我看到一个函数引用了一个std::vector,传递给它的参数让我对发生的事情感到困惑。看起来是这样的: void aFunction(const std::vector<int>& arg) { } int main() { aFunction({ 5, 6, 4 }); // Curly brace initialisation? Converting constructor? std::vector<int> arr({ 5, 6, 4

我看到一个函数引用了一个std::vector,传递给它的参数让我对发生的事情感到困惑。看起来是这样的:

void aFunction(const std::vector<int>& arg) { }


int main()
{
    aFunction({ 5, 6, 4 }); // Curly brace initialisation? Converting constructor?

    std::vector<int> arr({ 5, 6, 4 }); // Also here, I can't understand which of the constructors it's calling

    return 0;
}
void函数(const std::vector&arg){
int main()
{
函数({5,6,4});//花括号初始化?转换构造函数?
std::vector arr({5,6,4});//同样在这里,我无法理解它在调用哪个构造函数
返回0;
}

谢谢。

这叫做
std::initializer\u list
。它从C++11开始就存在了


以下是它的工作原理。

对于通过这种结构创建的对象,您需要提供接受的构造函数,
std::vector
具有:

但您需要小心,如果在使用对象之前已经提到过它:

std::vector<int> v1( 2 ); // creates vector with 2 ints value 0
std::vector<int> v2{ 2 }; // creates vector with 1 int value 2
标准:向量v1(2);//创建具有2整数值0的向量 std::vector v2{2};//创建具有1 int值2的向量 注2:关于如何创建列表的问题,请参见文档:

在以下情况下,将自动构造std::initializer\u list对象:

带括号的init列表用于列表初始化,包括函数调用列表初始化和赋值表达式

大括号的init列表绑定到auto,包括在ranged for循环中


如何从大括号列表创建初始值设定项列表?它是初始化列表中的转换构造函数吗?
// c++11 initializer list syntax:
std::vector<std::string> words1 {"the", "frogurt", "is", "also", "cursed"}; 
Someobject {
   Someobject( int ){}
};

Someobject obj1(1); // usual way
Someobject obj2{1}; // same thing since C++11
std::vector<int> v1( 2 ); // creates vector with 2 ints value 0
std::vector<int> v2{ 2 }; // creates vector with 1 int value 2