2016-11-14 1 views
-1

아래 클래스의 선언 사이의 차이점은 무엇입니까?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

관련 문제