當我編譯用gcc下面的代碼:-Wconversion警告
int main()
{
unsigned char c = 1;
c <<= 1; // WARNING ON THIS LINE
return 0;
}
我得到這樣的警告:
conversion to ‘unsigned char’ from ‘int’ may alter its value [-Wconversion]
爲什麼?這段代碼有什麼問題?其實,我真的可以在unsigned char
變量上使用操作符<<=
嗎?
編譯命令:
g++ test.cpp -Wconversion -o test.exe
對我來說,這對於編譯器編寫者和用戶來說都是那些「該死的,如果你做了,該死的,如果你沒有」的情況。作爲一個用戶,你寫的是乾淨的,併產生預期的答案,通常是完全可以接受的。它並不需要額外的語言混亂,使其更難理解。作爲一名編譯器編寫者,技術上存在縮小的轉換,所以警告在技術上是正確的。但我不禁覺得,在這種情況下,或者類似的涉及「短」(這可能會引發警告),這種警告實際上並不具有建設性。 –