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

Weird syntax for push_back function in std::vector

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

std::vector<Vertex> vertices;

vertices.push_back({ 1, 2, 3 });
vertices.push_back(Vertex(1, 2, 3));

这不是成员初始化列表而是 copy list initialization (C++11 起)。

7) in a function call expression, with braced-init-list used as an argument and list-initialization initializes the function parameter

vertices.push_back() 期望一个 Vertex 作为参数,braced-init-list { 1, 2, 3 } 用于构造一个临时的 Vertex 稍后传递给 push_back。正如您所说,您也可以将其视为隐式转换,即从 braced-init-listVertex.

的转换