負整數值的模糊函數重載錯誤
在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 }</code>
人們可能期望任何整數值都會呼叫 display(int),而 int 範圍之外的值將是不明確的。然而,當使用最大負數 int 值 -2147483648 時,就會出現編譯錯誤。
為什麼會出現錯誤
關鍵在於缺少負整數文字在C .整數量不能以「-」符號開頭,這表示-2147483648 被解釋為應用於2147483648 的一元否定運算子。
由於 2147483648 超出了 int 範圍,因此它會自動提升為 long int。呼叫display(-2147483648)時會出現歧義:編譯器無法確定是呼叫display(int)還是呼叫display(long int)。
異常處理
當負數及其正數表示具有相同的二進位值(例如縮寫為 -32768)時,會觀察到此行為。
避免歧義
避免歧義,請考慮以下最佳實踐:
以上是為什麼函數重載會導致最大負整數值出錯?的詳細內容。更多資訊請關注PHP中文網其他相關文章!