오늘 오전 12시 30 분에 템플릿 코드에서 BOOST_STATIC_ASSERT
을 사용하여 잘못된 유형의 참조를 작성하지 않도록했습니다. 분명히 오류 메시지 일 수 있습니다.C++은 const double을 처리하고 int를 참조하는 방식은 무엇입니까?
#include <iostream>
int main()
{
int x = 5;
const double& y = x;
std::cout << y << std::endl;
return 0;
}
: 나는 당신이 const를 더블 &이 int로 참조 할 때조차 불평하지 않는 GCC를 발견하는 충격을 받았다 대체 컴파일러 오류 살펴보고 정적 어설 제거하려고하지만 경우 컴파일하고 경고하지 않습니다.
$ g++ ~/stuff/badRef.cpp -Wall -Wextra -pedantic
$ a.out
5
여기에 무슨 일이 일어나고있는가요? 이것은 정의되지 않은 동작입니까? 그렇다면 왜 gcc는 불평하지 않습니까? 내 컴퓨터에서 int는 4 바이트이고 double은 8입니다. 즉, double을 인쇄 할 때 그 주소에서 8 바이트를 double로 해석하고 인쇄해야한다는 것을 의미합니다. 실제로는 그 위치에 4 바이트의 int가 있습니다.
매우 혼란 스럽습니다. 도움!
어떤 버전의 GCC입니까? –
버전 4.3.3입니다. – voltrevo
'const double & y = x;'뒤에'x = 42;'를 추가하면 어떻게됩니까? 첫눈에 호기심이 있거나 예기치 못한 경우 일 수 있습니다. – moala