#include <cstdio>
class A
{
public:
A(int){puts("3");};
int foo(){puts("4");return 10;}
};
int main()
{
A a(a.foo());
return 0;
}
uscite 4 e 3.Si sta utilizzando una funzione membro come argomento per un comportamento non definito del costruttore?
Si chiama una funzione membro prima di chiamare il costruttore. Il comportamento è definito dallo standard?
Sì, questo comportamento non è definito. Stai chiamando una funzione membro su una variabile che non è stata ancora inizializzata. – Mankarse
'A * bar = NULL;' 'bar-> foo();' funzionerà anche .. Solo così sai. È comunque indefinito. Ho anche provato qualcosa del tipo: 'char buffer [256]; A * bar = (A *) e buffer [0]; bar-> foo(); 'funziona anche .. Ancora indefinito. – Brandon
Perché questo è permesso a tutti? Come mai puoi accedere a 'a' prima che la sua dichiarazione sia finita? – Irfy