2012-02-24 9 views
6
class A{ 
    private: 
     string a; 
    public: 
     A():a("hello world"){}; 
     A(const string & arg):a(arg){}; 
     void put()const{cout<<a;}; 
}; 

A aaa(); 
A bbb; 

¿Cuál es la diferencia entre A aaa(); y A bbb; ¿Es aaa una función?diferencia entre Aaa; y Aaa();

+0

hay una tercera opción. llamando al constructor de forma explícita. A aaa = A(); –

+0

posible duplicado de [¿Por qué es un error usar un conjunto vacío de corchetes para llamar a un constructor sin argumentos?] (Http://stackoverflow.com/questions/180172/why-is-it-an-error-to -use-an-empty-set-of-brackets-to-call-a-constructor-with-no) –

Respuesta

11

Sí, el primero se interpreta como una declaración de función. Se ha llamado Most Vexing Parse.

+1

'A aaa();' no es un ejemplo del "análisis más irritante". El análisis más irritante se refiere a cuando intentas desasociar un objeto y pasar un inicializador de valor temporal a todos sus parámetros de constructor. p.ej. 'B c (D());' –

Cuestiones relacionadas