基本數據類型 | 類型 | 關鍵字 | 描述 | 所占位元組數 | 最大值 | 最小值 | | | | | | | | | 布爾型 | bool | 存儲值 true 或 false | bool | 1 | 0 | | 字元型 | char | 通常是一個八位位元組(一個字元)。這是一個整數類型 | ...
基本數據類型
類型 | 關鍵字 | 描述 | 所占位元組數 | 最大值 | 最小值 |
---|---|---|---|---|---|
布爾型 | bool | 存儲值 true 或 false | bool | 1 | 0 |
字元型 | char | 通常是一個八位位元組(一個字元)。這是一個整數類型 | 1 | ||
整型 | int | 對機器而言,整數的最自然的大小 | 4 | 2147483647 | -2147483648 |
浮點型 | float | 單精度浮點值。單精度是這樣的格式,1 位符號,8 位指數,23 位小數。 | 4 | 3.40282e+38 | 1.17549e-38 |
雙浮點型 | double | 雙精度浮點值。雙精度是 1 位符號,11 位指數,52 位小數。 | 8 | 1.79769e+308 | 2.22507e-308 |
無類型 | void | 表示類型的缺失。 | |||
寬字元型 | wchar_t | wchar_t 寬字元類型。2 或 4 | 2147483647 | -2147483648 |
修飾符
C++ 允許在 char、int 和 double 數據類型前放置修飾符,可以使用一個或多個類型修飾符進行修飾
修飾符 | 可修飾 |
---|---|
signed | 整型、字元型 |
unsigned | 字元型 |
short | 整型 |
long | 雙精度型 |
可以使用速記符號來聲明無符號短整數或無符號長整數。可以不寫 int,只寫單詞 unsigned、short 或 unsigned、long,int 是隱含的。例如,下麵的兩個語句都聲明瞭無符號整型變數。
unsigned x;
unsigned int y;
定義常量
- 使用 #define 預處理器。
- 使用 const 關鍵字。
#define A 1;
//or
const int B = 2;
//也可以修飾指針
const int *p = &B;
//===
int const *p = &B;
//或者直接修飾p
int *const p = &B;
⚠️ 最好把常量定義為大寫字母形式,
C++ 存儲類
存儲類定義 C++ 程式中變數/函數的範圍(可見性)和生命周期。
- auto
- register
- static
- extern
- mutable
- thread_local (C++11)
⚠️ 從 C++ 11 開始,auto 關鍵字不再是 C++ 存儲類說明符,且 register 關鍵字被棄用。
auto
auto 用於聲明變數時根據初始化表達式自動推斷該變數的類型、聲明函數時函數返回值的占位符
register
register 用於定義存儲在寄存器中而不是 RAM 中的局部變數
定義 'register' 並不意味著變數將被存儲在寄存器中,它意味著變數可能存儲在寄存器中,這取決於硬體和實現的限制。
static
static 保持局部變數的存在,不需要在每次它進入和離開作用域時進行創建和銷毀,static 修飾符也可以應用於全局變數。當 static 修飾全局變數時,會使變數的作用域限制在聲明它的文件內
extern
extern 用於提供一個全局變數的引用,全局變數對所有的程式文件都是可見的,對於無法初始化的變數,會把變數名指向一個之前定義過的存儲位置。
這裡有個疑問,全局變數的值在程式的整個生命周期內都是有效的,這個是指只能在生命它的文件內還是對所有文件起效? 那麼 extern 和 static 修飾全局變數的功能不是有一個多餘的嗎?
thread_local
使用 thread_local 聲明的變數僅可在它在其上創建的線程上訪問。 變數在創建線程時創建,併在銷毀線程時銷毀。 每個線程都有其自己的變數副本。
thread_local 說明符可以與 static 或 extern 合併。
可以將 thread_local 僅應用於數據聲明和定義,thread_local 不能用於函數聲明或定義。