#include <iostream>
int x;
struct A {
A(int a) {
x = a;
}
};
struct B {
B(A a) {
A local_a = a;
}
};
int main() {
x = 0;
std::cout << "Case #0: " << x << std::endl;
B b1(A(1));
std::cout << "Case #1: " << x << std::endl;
int t;
t = 2;
B b2(A(t));
std::cout << "Case #2: " << x << std::endl;
t = 3;
B b3((A(t)));
std::cout << "Case #3: " << x << std::endl;
return 0;
}
Как вы думаете, что должна вывести эта программа? Числа 0, 1, 2 и 3 последовательно для каждого случая?
А она печатает:
Case #0: 0
Case #1: 1
Case #2: 1
Case #3: 3
Почему для случая #2 не произошло присваивание? Куда делась двойка?
Ответ на этот вопрос кроется в наличии рудиментов языка С в грамматике С++.