반응형
왜 이것이 기본 생성자를 호출합니까?
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);
에서 캐스트로 해석 될 수int
로X
, 또는X(answer);
변수의 선언으로 해석 될 수 있기 때문 입니다.
그러나 인쇄X()
X(answer);
하고 기본 생성자를 호출하는 이유를 모르겠습니다 .
보너스 포인트 : 변수 선언 대신 임시로 변경하려면 무엇을 변경해야합니까?
왜냐하면 X (answer); 변수의 선언으로 해석 될 수 있습니다.
귀하의 답변은 여기에 숨겨져 있습니다. 변수를 선언하면 기본 ctor를 호출합니다 (POD가 아닌 경우 및 모든 항목).
편집시 : 임시를 얻으려면 몇 가지 옵션이 있습니다.
(X(answer));
(X)answer;
static_cast<X>(answer)
X{answer};
(C ++ 11)[]{ return X(answer); }();
(C ++ 11, 복사가 발생할 수 있음)void(), X(answer);
X((void(),answer));
true ? X(answer) : X();
if(X(answer), false){}
for(;X(answer), false;);
X(+answer);
괄호는 선택 사항입니다. 당신이 말한 것은와 동일 X answer;
하며 선언문입니다.
X 유형의 변수를 선언하려면 다음과 같이해야합니다.
X y(answer);
참고 URL : https://stackoverflow.com/questions/11691021/why-does-this-call-the-default-constructor
반응형
'Nice programing' 카테고리의 다른 글
사람들이 여전히 iframe을 사용하는 이유는 무엇입니까? (0) | 2020.10.07 |
---|---|
Reader와 InputStream의 차이점은 무엇입니까? (0) | 2020.10.07 |
xUnit.net : 글로벌 설정 + 분해? (0) | 2020.10.07 |
왜 많은 (오래된) 프로그램이 round (input) 대신 floor (0.5 + input)를 사용합니까? (0) | 2020.10.07 |
실패한 Rails 마이그레이션 롤백 (0) | 2020.10.07 |