首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ char 類型輸出差異解析:ch++、ch+1、ch=ch+1 的隱式轉換陷阱

     編輯:程式設計疑難解答

代碼現象


char ch = 'A';
// 1
ch = ch + 1;  // ch 變為 'B'
cout << ch;   // 輸出 B

// 2
cout << ch++; // 輸出 B (後置++ 返回舊值),ch 變為 'C'

// 3
cout << ch + 1; // 輸出 67 (ASCII 碼整數)

根因解析

表達式求值過程結果類型輸出
ch = ch + 11. ch 提升為 int (65)
2. +1 → 66
3. 賦值給 char 截斷為 'B'
char'B'
ch++1. 返回舊值 'B' (66)
2. ch 變為 'C'
3. << 重載識別為 char 輸出字符
char'B'
ch + 11. ch 提升為 int (67)
2. +1 → 68
3. 無賦值,表達式類型為 int
4. << 重載識別為 int 輸出數字
int68

核心規則

  1. 整數提升:char/short 參與算術運算自動提升為 int;
  2. 賦值截斷:將 int 賦值回 char 會截取低 8 位;
  3. 流輸出重載選擇:operator<<(char) 輸出字符,operator<<(int) 輸出數字。

避坑指南

  • 若需輸出字符結果,顯式轉型:cout << char(ch + 1);;
  • 若需輸出 ASCII 碼,顯式轉型:cout << int(ch);;
  • 調試時多用 printf("%d %c", ch, ch) 同時查看碼值與字符。

總結

ch+1 不賦值時保持 int 類型導致輸出數字;ch=ch+1 與 ch++ 因賦值/返回值為 char 類型故輸出字符。理解「整數提升」與「流重載解析」是關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved