2012-02-24 2 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; 

В чем разница между A aaa(); и A bbb; Есть aaa a функция?разница между A aaa; и A aaa();

+0

есть 3-й вариант. вызывающий конструктор явно. A aaa = A(); –

+0

Возможный дубликат [Почему это ошибка при использовании пустого набора скобок для вызова конструктора без аргументов?] (Http://stackoverflow.com/questions/180172/why-is-it-an-error-to -use-a-empty-set-of-brackets-to-call-a-constructor-with-no) –

ответ

11

Да, первый интерпретируется как объявление функции. Он называется Most Vexing Parse.

+1

'A aaa();' не является примером «наиболее неприятного разбора». Наиболее неприятный синтаксический разбор относится к тому, когда вы пытаетесь обработать объект и передать инициализатор значения, временный для всех его параметров конструктора. например 'B c (D());' –

Смежные вопросы