2016-11-14 3 views
-1

В чем разница между объявлениями классов ниже?В чем разница между A a; и A a() ;?

class A 
{ 
public: 
    A() 
    { 
     std::cout << "A()\n"; 
    } 
    ~A() 
    { 
     std::cout << "~A()\n"; 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    A a; // <-- this call the constructor and destructor 
    A b(); // <-- this is not!! what is a b()? 
    return 0; 
} 

Что такое b()?

ответ

3

Это вопрос most vexing parse; побочный эффект правила C++, что все, что может быть проанализировано как объявление , должно интерпретироваться как одно. Таким образом, A b(); является объявлением функции, b - функция ничего не принимает и возвращает A.

Из C++ 11 вы можете использовать скобки (list initialization) вместо круглых скобок; потому что функции не могут быть объявлены с помощью скобок для списка параметров, «двусмысленность» уходит.

A b{}; // calls A's default constructor 
+2

Просьба не отвечать на очевидные ошибки – NathanOliver

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