首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 資料型別深度解析:型別系統、轉換規則與溢位陷阱

     編輯:C++ 入門

強型別檢查的意義

C++ 強制變數先宣告型別再使用,編譯期即可捕獲型別不匹配錯誤,避免執行期驚喜。

基本型別分類與範圍

型別位元組範圍備註
char1-128 ~ 127字元或小整數
unsigned char10 ~ 255位元操作常用
short2-32,768 ~ 32,767
unsigned short20 ~ 65,535
int4-2,147,483,648 ~ 2,147,483,647自然字長
unsigned int40 ~ 4,294,967,295
long4/8平台相關Windows 64位仍為4
long long8-9.22e18 ~ 9.22e18C++11 標準化
float41.2E-38 ~ 3.4E+387 位有效數字
double82.2E-308 ~ 1.8E+30815 位有效數字,預設浮點
bool1true/falseC++ 關鍵字,非 typedef

為何保留 int 與 long?

歷史遺留:16 位系統 int=2bytes, long=4bytes;32/64 位系統趨同。可移植代碼請用 <cstdint> 固定寬度型別。

隱式型別轉換與資料損失

整數截斷

int x = 3.75; // x=3,直接捨棄小數部,非四捨五入

溢位環繞

short result;
long num1 = 200, num2 = 200;
result = num1 * num2; // 40,000 > 32,767
// 結果為 25,536 (40,000 - 65,536) —— 無符號環繞邏輯同理

原理: 同里程表 99999→00000。有號溢位屬未定義行為,無號溢位定義為模 2^N 環繞。

安全轉換最佳實踐

  1. 啟用編譯器警告:-Wconversion -Wsign-conversion -Wnarrowing
  2. 使用 static_cast 明確收窄轉換,gsl::narrow_cast (Guideline Support Library) 執行期檢查。
  3. 算術運算前預檢範圍,或改用任意精度庫。
  4. 浮點比較使用 epsilon 相對誤差法,勿直接 ==。

typedef 與 using 別名

typedef int Int32;     // C 風格
using Int32 = int;     // C++11 推薦,支援樣板別名
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved