BASIC 等動態語言自動推斷,但 C++ 為了編譯期型別安全、精確記憶體佈局、效能可預測,強制程式設計師明確指定:
int x1 = 1;
int x2 = 1000;
float y = 3.14f;
long z = 457000L;
| 型別 | 位元組 | 範圍 |
|---|---|---|
char | 1 | -128 ~ 127 |
unsigned char | 1 | 0 ~ 255 |
short | 2 | -32,768 ~ 32,767 |
unsigned short | 2 | 0 ~ 65,535 |
long / int | 4 | -2,147,483,648 ~ 2,147,483,647 |
unsigned long / unsigned int | 4 | 0 ~ 4,294,967,295 |
float | 4 | ±1.2E-38 ~ ±3.4E+38 (約 7 位有效數字) |
double | 8 | ±2.2E-308 ~ ±1.8E+308 (約 15 位有效數字) |
bool | 1 | true / false |
註:32 位元系統下 int 與 long 同為 4 bytes,16 位元時代 int 為 2 bytes,此為歷史遺留。
short result;
long a = 200, b = 200;
result = a * b; // 40,000 → 截斷為 -25,536 (溢位環繞)
short 最大 32,767,40,000 超出 → 環繞(如里程表 99999→00000)。
short x = 32767;
cout << x << endl; // 32767
x++;
cout << x << endl; // -32768 (非 32768!)
Cannot convert from X to Y:硬性錯誤。Conversion might lose significant digits:警告,視同錯誤處理,必須修正或顯式轉型。result = static_cast<short>(a * b); // 明確告知編譯器:我知道在做什麼
// 或 C 風格 (不推薦)
result = (short)(a * b);
現代 C++ 偏好 static_cast、reinterpret_cast 等具名轉型,語義清晰、可搜尋、可審計。
C++ Builder / Borland C++ 5.0 中 bool 為真正型別;舊編譯器可能僅 typedef int bool。標準 C++ 保證 sizeof(bool) == 1 且值僅 true/false。