Я часто сталкиваюсь со структурами POD в коде, которые вручную инициализируются нулями с помощью memset
, например так:
struct foo;
memset(&foo, 0, sizeof(foo));
Я проверил стандарт C++11, и он говорит: "Объект, инициализатором которого является пустой набор круглых скобок, то есть (), должен быть инициализирован значением". За этим следует:< /strong> "Инициализация значением [структуры pod] типа T означает... объект инициализируется нулями."
Итак... значит ли это, что вы можете всегда безопасно сократить приведенный выше код до следующего:
struct foo{};
И иметь гарантированно инициализированную структуру, как если бы вы вызвали memset(&foo, 0, ...)
?
Если да, то, вообще говоря, можете ли вы безопасно инициализировать что-либо с помощью пустых инициализаторов, например:
SomeUnknownType foo{}; // will 'foo' be completely "set" to known values?
Я знаю, что это не всегда было возможно в C++03 (до унифицированного синтаксиса инициализации), но это возможно сейчас в С++ 11 для любого типа?