![](/img/trans.png)
[英]Initializing std::vector<int> with square brackets [] inside; what is happening?
[英]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.