Установка вектора равным {}; - PullRequest
4 голосов
/ 08 февраля 2020

Всегда ли следующий код корректен или зависит от компилятора / платформы? Очевидно, я мог бы инициализировать edges с помощью конструктора значений, но мне любопытно посмотреть, работает ли здесь назначение копирования operator=, когда edges инициализируется размером 0, а затем устанавливается равным скобочному r-значению.

Это работает на моем MacBook.

std::vector<std::vector<int>> edges;
edges = {{1,2,3},{4},{5,6}};

1 Ответ

6 голосов
/ 08 февраля 2020

Это действительно (начиная с C ++ 11). std::vector имеет перегруженный operator=, принимающий std::initializer_list.

Заменяет содержимое на идентифицированные списком инициализатора ilist.

И std::initializer_list может быть создан из фигурного списка в определенных контекстах.

(выделено мной)

A std::initializer_list объект автоматически создается, когда :

...