Может ли кто-нибудь указать, какой пункт в стандарте поддерживает следующее поведение, полученное в Coliru, для фрагмента:
#include <iostream>
class A
{
int i;
float x;
public:
A() : i(10) {}
A(int i) : i(i) {}
int GetI() { return i; }
float GetF() { return x; }
};
int main()
{
A a;
A b(1);
A x{};
A y{1};
std::cout << a.GetI() << '\n';
std::cout << a.GetF() << '\n';
std::cout << b.GetI() << '\n';
std::cout << b.GetF() << '\n';
std::cout << x.GetI() << '\n';
std::cout << x.GetF() << '\n';
std::cout << y.GetI() << '\n';
std::cout << y.GetF() << '\n';
}
Код печатает:
10
0 ‹-- Не должно быть неизвестно?
1
0 ‹-- idem
10
0
1
0
Изменить:
Этот абзац взят из 4-го издания TCPL, стр. 490:
Для этого правила не так чисты, как хотелось бы. Для статически размещенных объектов (§6.4.2) правила точно такие же, как если бы вы использовали {}, поэтому значение альфы равно {"","",0}. Однако для локальных переменных и объектов бесплатного хранилища инициализация по умолчанию выполняется только для членов типа класса, а члены встроенного типа остаются неинициализированными, поэтому значение бета равно {"","",unknown}.
Г-н Страуструп ничего не говорит о неопределенном поведении.
Shouldn't be unknown?
Что вы ожидаете напечатать? - person Andy Prowl   schedule 25.12.2013