Странный синтаксис для функции push_back в std :: vector - PullRequest
4 голосов
/ 25 марта 2020

Я встретил следующий синтаксис для функции push_back. Vertex - это просто структура, которая содержит три числа с плавающей точкой x, y и z. Вторая строка выглядит так же, как написано. Но первая строка выглядит странно для меня. В видео, где это было объяснено, было сказано, что это сделано со списком инициализатора члена, но это больше похоже на неявное преобразование. Я просто смущен фигурными скобками там. Кто-нибудь может объяснить, почему этот синтаксис работает?

std::vector<Vertex> vertices;

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

1 Ответ

5 голосов
/ 25 марта 2020

Это не список инициализаторов членов, а инициализация списка копирования (начиная с C ++ 11).

7) в выражении вызова функции, с braced- init-list используется в качестве аргумента, а инициализация списка инициализирует параметр функции

vertices.push_back(), ожидающий Vertex в качестве аргумента, braced-init-list { 1, 2, 3 } используется для создания временного Vertex, который передается push_back позже. Как вы сказали, вы также можете думать, что это неявное преобразование, то есть преобразование из braced-init-list в Vertex.

...