C++ 強制變數先宣告型別再使用,編譯期即可捕獲型別不匹配錯誤,避免執行期驚喜。
| 型別 | 位元組 | 範圍 | 備註 |
|---|---|---|---|
| char | 1 | -128 ~ 127 | 字元或小整數 |
| unsigned char | 1 | 0 ~ 255 | 位元操作常用 |
| short | 2 | -32,768 ~ 32,767 | |
| unsigned short | 2 | 0 ~ 65,535 | |
| int | 4 | -2,147,483,648 ~ 2,147,483,647 | 自然字長 |
| unsigned int | 4 | 0 ~ 4,294,967,295 | |
| long | 4/8 | 平台相關 | Windows 64位仍為4 |
| long long | 8 | -9.22e18 ~ 9.22e18 | C++11 標準化 |
| float | 4 | 1.2E-38 ~ 3.4E+38 | 7 位有效數字 |
| double | 8 | 2.2E-308 ~ 1.8E+308 | 15 位有效數字,預設浮點 |
| bool | 1 | true/false | C++ 關鍵字,非 typedef |
歷史遺留: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 環繞。
-Wconversion -Wsign-conversion -Wnarrowingstatic_cast 明確收窄轉換,gsl::narrow_cast (Guideline Support Library) 執行期檢查。==。typedef int Int32; // C 風格
using Int32 = int; // C++11 推薦,支援樣板別名