std::vector 中 push_back 函数的奇怪语法

Nic*_*cky 5 c++ initialization stdvector list-initialization

我遇到了该push_back函数的以下语法。Vertex只是一个包含三个浮点数 x、y 和 z 的结构。第二行看起来就像会写它。但是第一行对我来说看起来很奇怪。在解释这一点的视频中,据说这是通过成员初始值设定项列表完成的,但它看起来更像是隐式转换。我只是对那里的大括号感到困惑。谁能解释为什么这种语法有效?

std::vector<Vertex> vertices;

vertices.push_back({ 1, 2, 3 });
vertices.push_back(Vertex(1, 2, 3));
Run Code Online (Sandbox Code Playgroud)

son*_*yao 5

这不是成员初始化列表,而是复制列表初始化(自 C++11 起)。

7) 在函数调用表达式中,用括号初始化列表作为参数,列表初始化初始化函数参数

vertices.push_back()期望 anVertex作为参数,braced-init-list { 1, 2, 3 }用于构造一个临时Vertex对象,push_back稍后传递给它。正如您所说,您也可以将其视为隐式转换,即从花括号初始化列表Vertex.