Так что в настоящее время я читаю «Язык программирования C ++» Бьярна Страуструпа (великая книга), и в разделе 17.3.1 упоминается, что объект без определенного конструктора и который инициализируется без инициализатора, будет (внестатические случаи) оставляют встроенные типы неопределенными.
У меня есть этот код
#include <iostream>
class A {
public:
int id;
// No constructor defined,
// so default constructor generated
};
void f() {
A a; // No initializer
std::cout << a.id << std::endl;
}
int main(int argc, char *argv[]) {
f();
return 0;
}
Я ожидаю, что при запуске этого кода будет напечатан мусор, но вместо этого я получу инициализированный(0
) значение для a.id
.Кроме того, если мы переопределим A
так:
class A {
public:
int id;
A()=default;
};
Теперь при запуске этого кода a.id
будут значениями мусора, как я и ожидал ранее.
Для первогоВ таком случае, почему id
член A инициализируется?Почему два случая дают разные результаты?
Я использую g ++ / gcc версии 8.1.0