태그 보관물: most-vexing-parse

most-vexing-parse

왜 이것이 기본 생성자를 호출합니까? 할 것으로 예상했을

struct X
{
    X()    { std::cout << "X()\n";    }
    X(int) { std::cout << "X(int)\n"; }
};

const int answer = 42;

int main()
{
    X(answer);
}

이 중 하나를 인쇄 할 것으로 예상했을 것입니다.

  • X(int)때문에 X(answer);에서 캐스트로 해석 될 수 intX, 또는
  • X(answer);변수의 선언으로 해석 될 수 있기 때문에 전혀 없습니다 .

그러나 인쇄X()X(answer); 되고 기본 생성자를 호출하는 이유를 모르겠습니다 .

보너스 포인트 : 변수 선언 대신 임시로 변경하려면 무엇을 변경해야합니까?



답변

X (답변); 변수의 선언으로 해석 될 수 있습니다.

귀하의 답변은 여기에 숨겨져 있습니다. 변수를 선언하면 기본 ctor를 호출합니다 (POD가 아닌 경우 및 모든 항목).

편집시 : 임시를 얻으려면 몇 가지 옵션이 있습니다.


답변

괄호는 선택 사항입니다. 당신이 말한 내용은와 동일 X answer;하며 선언문입니다.


답변

X 유형의 변수를 선언하려면 다음과 같이해야합니다.

X y(answer);


답변