#include <cstdio>
class A
{
public:
A(int){puts("3");};
int foo(){puts("4");return 10;}
};
int main()
{
A a(a.foo());
return 0;
}
Wyjścia 4 i 3.Używa funkcji składowej jako argumentu do niezdefiniowanego zachowania konstruktora?
To wywołuje funkcję składową przed wywołaniem konstruktora. Czy zachowanie jest zdefiniowane przez standard?
Tak, to jest niezdefiniowane zachowanie. Wywołujesz funkcję członkowską na zmiennej, która nie została jeszcze zainicjalizowana. – Mankarse
'A * bar = NULL;' 'bar-> foo();' również będzie działał .. Tak, żebyś wiedział. Jest jednak niezdefiniowany. Próbowałem również coś takiego: 'char buffer [256]; A * bar = (A *) i bufor [0]; bar-> foo(); 'działa też ... Ciągle nieokreślony. – Brandon
Dlaczego jest to w ogóle dozwolone? Jak możesz uzyskać dostęp do "a" zanim jego deklaracja się skończy? – Irfy