C++的關鍵字介紹
C++的識別符號用來標識變數、函式、類、模組,或使用者自定義的專案名稱。一個識別符號以字母a-z或A-Z或下劃線_開始,後面跟零個或多個字母、下劃線和數字0-9。C++的識別符號不允許出現標點符號,如@、&、%等。
下表列出了C++中的保留關鍵字,這些關鍵字不能作為變數名或其他識別符號名稱。
1、auto
C++11的 auto 表示變數的自動型別推斷。即在宣告變數的時候,根據變數初始值的型別自動為此變數選擇匹配的型別。
auto
x
=
3
;
// x 為 int 型別
cout
<<
typeid
(
x
)。
name
()
<<
endl
;
auto 變數必須在定義時初始化,這類似於const關鍵字。
2、bool、true、false
bool 型別是C++ 中的基本資料結構。bool 型別只有兩個取值,true 和 false。true 表示“真”,false 表示“假”。
bool 型別常用於條件判斷、開關變數的值或函式返回值。
3、char、wchar_t
char 型別表示單個字元。char 型別的資料需要用單引號括起來:
char
letter
=
‘A’
;
wchar_t 是寬字元型別,每個 wchar_t 型別佔2個位元組,16位寬。漢字的表示就需要用到 wchar_t。
字元與整數密切相關,它們在內部其實是被儲存為整數。每個可列印的字元以及許多不可列印的字元都被分配一個唯一的數字。用於編碼字元的最常見方法是 ASCII(美國資訊交換標準程式碼的首字母簡寫)。
4、int、short、long
int 型別用於表示整數。
short 型別用於表示短整型整數,數值範圍小於int。
long 型別用於表示長整型整數,數值範圍大於int。
5、float、double、long double
float 型別用於表示單精度浮點數。
double 型別用於表示雙精度浮點數,double比float的範圍大、有效數字多。long double 比 double 的精度更大。
當某個浮點值被分配給整型變數時,該值的小數部分(即小數點後的部分)將被丟棄。
int
num
=
1。23
;
// num 值為1
6、signed、unsigned
signed(有符號),表明該型別是有符號數,和 unsigned(無符號)相反。數字型別(整型和浮點型)預設就是 signed。
7、enum
enum 表示列舉型別,可以給出一系列固定值,實質上是 int 型別。
enum
color
{
RED
=
0
,
GREEN
=
1
,
BLUE
=
2
};
8、union
union 是聯合體型別,透過共享記憶體,一個union可以有多個數據成員。但在任意時刻,聯合中只能有一個數據成員可以有值。例如
union
price
{
char
x
int
y
;
double
z
;
};
9、struct、class
class是一般的類型別,struct在C++中是特殊的類型別,宣告中預設的訪問許可權與class不同,struct是public,class是private。
10、sizeof
sizeof 運演算法用於獲取資料型別佔用的位元組數。
11、typeid
typeid運算子可以輸出變數的型別。
12、typedef
typedef 可以為現有資料型別建立一個別名,便於程式的閱讀和編寫。
13、static
用於宣告靜態變數或類的靜態函式。靜態變數作用範圍在一個檔案內,程式開始時分配空間,結束時釋放空間,預設初始化為 0,使用時可改變其值。
C++ 類的成員變數被宣告為 static(稱為靜態成員變數),意味著它被該類的所有例項所共享,也就是說當某個類的例項修改了該靜態成員變數,其修改值為該類的其它所有例項所見;而類的靜態成員函式也只能訪問靜態成員(變數或函式)。
14、public、protected、private
許可權修飾符。
public為公有的,訪問不受限制;
protected為保護的,只能在本類、派生類中訪問;
private為私有的,只能在本類中訪問。
15、virtual
用於宣告虛基類、虛擬函式。虛擬函式=0時,則為純虛擬函式,純虛擬函式所在的類稱為抽象類。
16、override、final
override 用於表示當前函式重寫了基類的虛擬函式。
final 用於禁止類繼承、禁止過載虛擬函式。
class
Base
{
public
:
virtual
void
g
();
// 虛擬函式
virtual
void
h
()
=
0
;
// 純虛擬函式
};
class
Derived
:
public
Base
{
void
g
()
override
;
// 表示派生類重寫基類虛擬函式
void
h
()
final
;
// 表示不可再被派生類進一步過載
};
17、operator
用於過載運算子。如下過載類Person的 == 運演算法。
18、const、constexpr
const 表示所修飾的物件或變數不能被改變。
constexpr 用於生成常量表達式,常量表達式主要是允許一些計算發生在編譯時,而不是執行的時候。
19、using
用於在當前檔案引入名稱空間,例如:using namespace std;
在子類中,使用 using 宣告引入基類成員名稱。
20、namespace
C++標準程式庫中的所有識別符號都被定義於一個名為 std 的namespace中。
名稱空間除了系統定義的名字空間之外,還可以自己定義,定義名稱空間用關鍵字 namespace,使用名稱空間時用符號 :: 指定。
21、inline
宣告為行內函數,即在編譯時將所呼叫的函式程式碼直接嵌入到主調函式中。
22、new、delete
new 用於向記憶體申請一段新的空間,delete 用於釋放申請空間。
23、this
每個類成員函式都隱含了一個this指標,用來指向類本身。
this指標一般可以省略,但在賦值運算子過載的時候要顯示使用。靜態成員函式沒有this指標。
24、nullptr
C++11新引入的,用來宣告一個 空指標,代替NULL。
int
*
p
=
nullptr
;
25、void
特殊的“空”型別,指定函式無返回值或無引數。
26、friend
用於宣告友元關係。
友元可以訪問與其有 friend 關係的類中的 private/protected 成員,透過友元直接訪問類中的 private/protected 成員的主要目的是提高效率。
友元包括友元函式和友元類。
27、template
模板,C++中泛型機制的實現。模板就是實現程式碼重用機制的一種工具,它可以實現型別引數化,即把型別定義為引數, 從而實現了真正的程式碼可重用性。模版可以分為兩類,一個是函式模版,另外一個是類模版。
28、if、else
用於條件語句。
29、for、while、do
用於迴圈語句。
30、switch、case、default
用於分支語句。switch 表示分支語句的起始,根據 switch 條件跳轉到 case 標記或 defalut 標記的分支上。
31、break、continue、goto
break用於跳出for、while迴圈或switch語句。
continue用於跳到一個迴圈的起始位置。
goto用於無條件跳轉到函式內的標記處,一般情況不建議使用goto。
32、and、or、xor、not、bitand、bitor
and 表示邏輯與 &&;
or 表示邏輯或 ||;
xor 表示邏輯異或 ^;
not 表示邏輯非 !;
bitand 表示按位與 &;
bitor 表示按位或 |。
33、return
return表示從被調函式返回到主調函式繼續執行,返回時可帶一個返回值。
34、try、catch、throw
用於異常處理。try 指定 try 塊的起始,try 塊後的 catch 可以捕獲異常,異常由 throw 丟擲。
35、noexcept
C++11中,用於宣告一個函式不可以丟擲任何異常。
36、static_cast、const_cast、dynamic_cast、reinterpret_cast
C++型別風格來性轉換:
static_cast用於靜態轉換;
const_cast刪除const變數的屬性,方便賦值;
dynamic_cast用於將一個父類物件的指標轉換為子類物件的指標或引用;
reinterpret_cast將一種型別轉換為另一種不同的型別。
37、register
提示編譯器儘可能把變數存入到CPU內部暫存器中。
38、explicit
explicit 的作用是禁止單引數建構函式被用於自動型別轉換,比較典型的是容器型別。
39、extern
當出現extern “C”時,表示 extern “C”之後的程式碼按照C語言的規則去編譯;
當extern修飾變數或函式時,表示其具有外部連結屬性,即其既可以在本模組中使用也可以在其他模組中使用。
#ifdef __cplusplus
extern
“C”
{
#endif
// 按照C語言的規則去編譯
#ifdef __cplusplus
}
#endif