C++?修飾符類型
C++ 允許在?char、int 和 double?數據類型前放置修飾符。
修飾符是用于改變變量類型的行為的關鍵字,它更能滿足各種情境的需求。
下面列出了數據類型修飾符:
- signed:表示變量可以存儲負數。對于整型變量來說,signed 可以省略,因為整型變量默認為有符號類型。
- unsigned:表示變量不能存儲負數。對于整型變量來說,unsigned 可以將變量范圍擴大一倍。
- short:表示變量的范圍比 int 更小。short int 可以縮寫為 short。
- long:表示變量的范圍比 int 更大。long int 可以縮寫為 long。
- long long:表示變量的范圍比 long 更大。C++11 中新增的數據類型修飾符。
- float:表示單精度浮點數。
- double:表示雙精度浮點數。
- bool:表示布爾類型,只有 true 和 false 兩個值。
- char:表示字符類型。
- wchar_t:表示寬字符類型,可以存儲 Unicode 字符。
修飾符?signed、unsigned、long 和 short?可應用于整型,signed?和?unsigned?可應用于字符型,long?可應用于雙精度型。
這些修飾符也可以組合使用,修飾符?signed?和?unsigned?也可以作為?long?或?short?修飾符的前綴。例如:unsigned long int。
C++ 允許使用速記符號來聲明無符號短整數或無符號長整數。您可以不寫 int,只寫單詞?unsigned、short?或?long,int?是隱含的。例如,下面的兩個語句都聲明了無符號整型變量。
signed int num1 = -10; // 定義有符號整型變量 num1,初始值為 -10
unsigned int num2 = 20; // 定義無符號整型變量 num2,初始值為 20
short int num1 = 10; // 定義短整型變量 num1,初始值為 10
long int num2 = 100000; // 定義長整型變量 num2,初始值為 100000
long long int num1 = 10000000000; // 定義長長整型變量 num1,初始值為 10000000000
float num1 = 3.14f; // 定義單精度浮點數變量 num1,初始值為 3.14
double num2 = 2.71828; // 定義雙精度浮點數變量 num2,初始值為 2.71828
bool flag = true; // 定義布爾類型變量 flag,初始值為 true
char ch1 = 'a'; // 定義字符類型變量 ch1,初始值為 'a'
wchar_t ch2 = L'你'; // 定義寬字符類型變量 ch2,初始值為 '你'
為了理解 C++ 解釋有符號整數和無符號整數修飾符之間的差別,我們來運行一下下面這個短程序:
#include <iostream>
using namespace std;/* * 這個程序演示了有符號整數和無符號整數之間的差別
*/
int main()
{short int i; // 有符號短整數short unsigned int j; // 無符號短整數j = 50000;i = j;cout << i << " " << j;return 0;
}
當上面的程序運行時,會輸出下列結果:
-15536 50000
上述結果中,無符號短整數 50,000 的位模式被解釋為有符號短整數 -15,536。
C++ 中的類型限定符
類型限定符提供了變量的額外信息,用于在定義變量或函數時改變它們的默認行為的關鍵字。
限定符 | 含義 |
const | const 定義常量,表示該變量的值不能被修改。 |
volatile | 修飾符 volatile 告訴該變量的值可能會被程序以外的因素改變,如硬件或其他線程。。 |
restrict | 由 restrict 修飾的指針是唯一一種訪問它所指向的對象的方式。只有 C99 增加了新的類型限定符 restrict。 |
mutable | 表示類中的成員變量可以在 const 成員函數中被修改。 |
static | 用于定義靜態變量,表示該變量的作用域僅限于當前文件或當前函數內,不會被其他文件或函數訪問。 |
register | 用于定義寄存器變量,表示該變量被頻繁使用,可以存儲在CPU的寄存器中,以提高程序的運行效率。 |
const 實例
const int NUM = 10; // 定義常量 NUM,其值不可修改
const int* ptr = &NUM; // 定義指向常量的指針,指針所指的值不可修改
int const* ptr2 = &NUM; // 和上面一行等價
volatile 實例
volatile int num = 20; // 定義變量 num,其值可能會在未知的時間被改變
mutable 實例
class Example {
public:int get_value() const {return value_; // const 關鍵字表示該成員函數不會修改對象中的數據成員}void set_value(int value) const {value_ = value; // mutable 關鍵字允許在 const 成員函數中修改成員變量}
private:mutable int value_;
};
static 實例
void example_function() {static int count = 0; // static 關鍵字使變量 count 存儲在程序生命周期內都存在count++;
}
register 實例
void example_function(register int num) {// register 關鍵字建議編譯器將變量 num 存儲在寄存器中// 以提高程序執行速度// 但是實際上是否會存儲在寄存器中由編譯器決定
}