警告我有,我相信是簡單修復,但我不知所措的問題...修復「比較始終是假的......」在GCC
我有一個模板,執行以下代碼:
T value = d;
if (std::numeric_limits<T>::is_signed)
{
if (value < 0)
{
*this += _T("-");
value = -(signed)value;
}
}
現在的,原因很明顯,GCC是給我一個警告(比較總是由於數據類型的範圍有限假)時,該代碼被編譯爲一個無符號的類型。我完全理解這個背後的原因,並且我在numeric_limits檢查中查看是否可以讓編譯器關閉它(它對MSVC有效)。唉,在GCC下我得到了警告。有沒有什麼辦法可以解決這個警告?(缺少禁用我甚至不知道你是否可以用GCC做的警告)?代碼永遠不會被調用,我會認爲優化器也會將其編譯出來,但我無法擺脫警告。
有人可以給我一個解決方案嗎?
乾杯!
當int是16位時,這是非常討厭的。當'value'很長時,'value = - (signed/* int * /)值會截斷較大的值。相反,乘以'-1',並讓優化器找出它。 – MSalters 2010-06-29 12:13:33