Простой ответ - да.
У него есть конструктор по умолчанию.
Примечание: структура и класс идентичны (кроме состояния по умолчанию спецификаторов доступа).
Но то, будет ли он инициализировать элементы, будет зависеть от того, как объявлен фактический объект. В вашем примере no член не инициализирован и имеет неопределенное значение.
void func()
{
_bar_ a; // Members are NOT initialized.
_bar_ b = _bar_(); // Members are zero-initialized
// From C++14
_bar_ c{}; // New Brace initializer (Members are zero-initialized)
_bar_* aP = new _bar_; // Members are NOT initialized.
_bar_* bP = new _bar_(); // Members are zero-initialized
// From C++14
_bar_ cP = new _bar_{}; // New Brace initializer (Members are zero-initialized)
}
// static storage duration objects
// i.e. objects at the global scope.
_bar_ c; // Members are zero-initialized.
Точные детали поясняются в стандарте в 8.5 Initializers [dcl.init]
параграфах 4-10. Но следующее упрощенное резюме для этой ситуации.
Структура без определяемого пользователем конструктора имеет созданный компилятором конструктор. Но то, что он делает, зависит от того, как он используется, и он либо по умолчанию инициализирует свои члены (что для типов POD обычно ничто), либо может инициализировать свои члены нулями (что для POD обычно означает устанавливать его члены равными нулю).
PS. Не используйте _
в качестве первого символа в имени типа. Вы столкнетесь с проблемами.