負の整数値によるあいまいな関数オーバーロード エラー
C で関数をオーバーロードする場合、負の整数の特定の要件と制限を理解することが重要ですリテラル。次の例を考えてみましょう。
<code class="cpp">void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; // prints -2147483648 display(-2147483648); // compilation error }
任意の整数値が display(int) を呼び出すことが予想される一方で、int の範囲外の値は曖昧になります。ただし、コンパイル エラーは、特に最も負の int 値 -2147483648 を使用した場合に発生します。
エラーが発生する理由
重要なのは、負の整数リテラルが存在しないことです。 C で。整数リテラルは「-」記号で始めることはできません。つまり、-2147483648 は 2147483648 に適用される単項否定演算子として解釈されます。
2147483648 は int の範囲を超えているため、自動的に long int に昇格されます。このあいまいさは、display(-2147483648) が呼び出されるときに発生します。コンパイラは、display(int) と display(long int) のどちらを呼び出すかを決定できません。
例外処理
この動作は、負の数値とその正の表現が同じバイナリ値 (short の -32768 など) を持つ場合に観察されます。
曖昧さの回避
曖昧さを回避するにはでは、次のベスト プラクティスを検討してください:
以上が関数のオーバーロードにより最も負の整数値でエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。