2
unsigned long long value = 0;
bool result = value >= std::numeric_limits<signed int>::min();
這應該是正確的,但會給出錯誤?爲什麼以及如何修復它?無法正確比較兩個數字
unsigned long long value = 0;
bool result = value >= std::numeric_limits<signed int>::min();
這應該是正確的,但會給出錯誤?爲什麼以及如何修復它?無法正確比較兩個數字
int轉換爲一個無符號整數進行比較。您可以將unsigned long long
投射到long long
。
5/9:
意想不到的算術或枚舉類型 事業轉換 操作數,並以類似的方式產生 結果類型許多二元運算符。 的目的是產生一個通用的類型, 這也是結果的類型。 這種模式被稱爲平常 算術轉換,這是 定義如下:
...
然後,如果 操作數是無符號長的 其他應轉換爲無 長。
...
否則,如果一個操作數是無符號 ,其他應換算 爲無符號。
unsigned long long
和long long
都不是標準的類型在C + + 03,但它很可能是編譯器會把使用上面定義的機制這些類型。上述轉換規則將涵蓋此特定轉換。
答案與您最後一個問題的答案相同(http://stackoverflow.com/questions/5692882/bug-in-boost-check)。 – 2011-04-17 14:25:00