繁体   English   中英

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

[英]What is happening in this std::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 }); // Also here, I can't understand which of the constructors it's calling

    return 0;
}

谢谢。

对于要由这种结构创建的对象,您需要提供接受std :: initializer_list并且std::vector一(8)的构造函数:

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

您也可以在该页面上看到一个示例:

// c++11 initializer list syntax:
std::vector<std::string> words1 {"the", "frogurt", "is", "also", "cursed"}; 

注意:C ++ 11还允许使用大括号将对象初始化:

Someobject {
   Someobject( int ){}
};

Someobject obj1(1); // usual way
Someobject obj2{1}; // same thing since C++11

但您需要注意,如果在对象之前提到了ctor,则可以使用它:

std::vector<int> v1( 2 ); // creates vector with 2 ints value 0
std::vector<int> v2{ 2 }; // creates vector with 1 int value 2

注意2:对于您的问题,列表是如何创建的,在文档中进行了描述:

在以下情况下会自动构造一个std :: initializer_list对象:

在列表初始化中使用了一个括号初始列表,包括函数调用列表初始化和赋值表达式

括号初始列表绑定到自动,包括在for循环范围内

这称为std::initializer_list 自C ++ 11起就存在。

这是有关其工作原理的参考手册

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM