Инициализация значения против агрегатной инициализации

Я сталкиваюсь с проблемой инициализации значения, смешанной с инициализацией агрегата.
До сих пор я пытался полагаться на выполнение всех моих инициализаций следующим образом:

auto var = Type {};

(Да, я знаю о том, что ctra-initializer ctor vs по умолчанию ctor ловушка. Так что, пожалуйста, никаких комментариев об этом!)

Я ожидаю, что это правильно «обнулит» или инициализирует память var.

Но в VS 2013 Update 2 я вижу это:

#include <string>
#include <iostream>

using namespace std;struct B
{
double g[10];
std::string str;
};

struct C
{
double g[10];
};

struct A
{
double a[3];
double b = 0;
double d;
struct B b_stuff;
struct C c_stuff;
A() : b_stuff{}, c_stuff{} {}
};

int main()
{
auto a = A{};
double big[50] = {};

for(auto b : a.b_stuff.g) { cout << b << " "; }
cout << endl;
cout << endl;
for(auto b : a.c_stuff.g) { cout << b << " "; }
cout << endl;
cout << endl;
for (auto b : big) {  cout << b << " "; }

return 0;
}

Выход такой:

-9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061 -9.25596e+061

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

С GCC 4.7.2:

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Я прочитал это, но я не вижу причины для такого поведения, не равного нулю:

http://en.cppreference.com/w/cpp/language/value_initialization
http://en.cppreference.com/w/cpp/language/aggregate_initialization

Итак, VS 2013 глючит? Почему он не обнуляет массив a.b_stuff.g?

0

Решение

Visual C ++ имеет длинная и легендарная история ошибок инициализации значения. я верю Ошибка 746973 это тот, кого вы наткнулись здесь.

2

Другие решения


По вопросам рекламы [email protected]