最も負のint値は、あいまいな関数のオーバーロードに関するエラーを引き起こすのはなぜですか?
私は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)があいまいです しかし、同じ値をに取り、その値を出力するintと、になります2147483648。私は文字通りこの振る舞いに混乱しています。 この動作は、最も負の数が渡されたときにのみ観察されるのはなぜですか?(a shortが-32768- と一緒に使用された場合の動作は同じです。実際には、負の数と正の数が同じ2進数表現を持つ場合) 使用するコンパイラ:g ++(GCC)4.8.5