나는 C ++에서 함수 오버로딩에 대해 배우고 있는데 이것을 발견했습니다.
void display(int a)
{
cout << "int" << endl;
}
void display(unsigned a)
{
cout << "unsigned" << endl;
}
int main()
{
int i = -2147483648;
cout << i << endl; //will display -2147483648
display(-2147483648);
}
내가 이해 한 바에 따르면 int
범위 (제 경우 int
에는 4 바이트) 에 제공된 모든 값 이 호출 display(int)
되고이 범위를 벗어난 값은 모호합니다 (컴파일러가 호출 할 함수를 결정할 수 없기 때문에). int
최소값을 제외한 전체 값 범위에 대해 유효합니다. 즉 -2147483648
컴파일이 오류와 함께 실패하는 경우
과부하 호출
display(long int)
이 모호합니다.
그러나 동일한 값을 an에 취하고 값을 int
인쇄하면 2147483648
. 나는이 행동과 문자 그대로 혼동된다.
이 동작은 가장 많은 음수가 전달 될 때만 관찰되는 이유는 무엇입니까? ( 사실 음수와 양수가 동일한 이진 표현을 갖는 경우에 a short
와 함께 사용되는 경우 동작은 동일합니다. -32768
)
사용 된 컴파일러 : g ++ (GCC) 4.8.5