Рассмотрим:
void foo() {
std::vector<std::atomic<int>> foo(10);
...
}
Является ли содержимое foo действительным? Или мне нужно явно выполнить цикл и инициализировать их? Я проверил на Godbolt, и это выглядит нормально, однако стандарт в этом вопросе кажется очень запутанным.
Конструктор std :: vector говорит, что он вставляет default-вставленный экземпляров std::atomic<int>
, которые значения инициализируются путем размещения new
.
Я думаю, что этот эффект инициализации значения применяется:
2)если T является типом класса с конструктором по умолчанию, который не предоставлен и не удален пользователем (то есть это может быть класс с неявно определенным или дефолтным конструктором по умолчанию), объект инициализируется нулями, а затем он устанавливается по умолчанию. инициализируется, если имеет нетривиальный конструктор по умолчанию;
Так что мне кажется, что атомы инициализируются нулями. Итак, вопрос в том, приводит ли нулевая инициализация std::atomic<int>
к действительному объекту?
Я собираюсь догадаться, что ответ «да на практике, но он не определен»?
Примечание: Этот ответ согласен с тем, что он инициализирован нулем, но на самом деле не говорит, означает ли это, что объект действителен.