如果存在任何可能發生溢出錯誤的情況,將大整數類型轉換爲較小的符號通常不是一個好主意嗎?餘物通過這個代碼在C++引物(17.5.2),這表明低級別IO操作驚訝:將int從int轉換爲char,其中涉及溢出錯誤
int ch;
while((ch = cin.get()) != EOF)
cout.put(ch); //overflow could occur here
鑑於
- cin.get()將其轉換獲得要
unsigned char
字符,和然後到int
。因此ch
將在0-255
範圍內(不包括EOF)。一切都很好。 - 但是然後在
put(ch)
表達式ch
被轉換回char
。如果char
是signed
那麼從128-255
開始ch
的任何值都會導致溢出,當然?
請問這樣的代碼是一般不好的做法,如果我期待普通輸入0-127
之外的東西,因爲我們不能保證溢出如何治療?
'cin.get'保證如果返回值不是'EOF',那麼它可以表示爲'unsigned char'。 –
@KerrekSB我以爲這就是我所說的。也許我應該更清楚一點,我關心的是'cout.put(ch)'聲明。 – SergeantPenguin
啊,是的。通常,所有的IO函數都把'char'值從'unsigned char'轉換,所以這很好。請注意,轉換是*未指定*而不是「溢出」。 –