C++關鍵字及其詳解

C++關鍵字

 備註:圖中是C++98/03中的63個關鍵字,紅色標註的是C語言的32個關鍵字。C++11中有73個關鍵字,新增加的10個分別爲:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexpect、nullptr、static_assert、thread_local
下面是對部分關鍵字的解釋:

一、數據類型相關

1、bool、true、false
   bool即爲布爾類型,屬於基本類型中的整數類型,取值爲真和假。true和false是具有布爾類型的字面量,爲右值,即表示真和假。
注:字面量:用於表達源代碼中一個固定值的表示法。

2、char、wchar_t
   表示字符型和寬字符型這些整數類型(屬於基本類型),但一般只專用於表示字符。char(和signed char、unsigned char一起)事實上定義了字節的大小。char表示單字節字符,wchar_t表示多字節字符

3、 int、double、float、short、long、signed、unsigned
  signed和unsigned作爲前綴修飾整數類型,分別表示有符號和無符號。signed和unsigned修飾char類型,構成unsigned char和signed char,和char都不是相同的類型;不可修飾wchar_t、char16_t和char32_t。其它整數類型的signed省略或不省略,含義不變。signed或unsigned可單獨作爲類型,相當於signed int和unsigned int。
  double和float專用於浮點數,double表示雙精度,精度不小於float表示的浮點數。long double則是C++11指定的精度不小於double的浮點數。

4、explicit
    該關鍵字的作用就是避免自定義類型隱式轉換爲類類型。

5、auto 
   auto關鍵字會根據初始值自動推斷變量的數據類型。不是每個編譯器都支持auto。
   例:
       auto  x = 7;  //使用整數7對變量x進行初始化,可推斷x爲int型。
       auto  y=1.234;  //使用浮點數1.234對變量y進行初始化,可推斷y爲double型。

二、語句相關

1、switch、case、default
   switch分支語句的起始,根據switch條件跳轉到case標號或defalut標記的分支上。

2、do、for、while
  循環語句的組成部分,C和C++都支持這3種循環。

3、if和else
   條件語句的組成部分。if表示條件,之後else表示否定分支。

4、break、cotinue、goto 
   break用於跳出for、while循環或switch語句。continue用於調到一個循環的起始位置。goto用於無條件跳轉到函數內得標號處。一般情況不建議使用goto,風險較大。

三、定義、初始化相關  


1、const、volatile
   const和volatile是類型修飾符,語法類似,用於變量或函數參數聲明,也可以限制非靜態成員函數。const表示只讀類型(指定類型安全性,保護對象不被意外修改),volatile指定被修飾的對象類型的讀操作是副作用(因此讀取不能被隨便優化合並,適合映射I/O寄存器等)。
  volatile:
  a、當讀取一個變量時,爲提高存取速度,編譯器優化時有時會先把變量讀取到一個寄存器中,以後再取變量值時,就直接從寄存器中取值。
  b、優化器在用到volatile變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存到寄存器裏的備份。
  c、volatile適用於多線程應用中被幾個任務共享的變量。

2、enum
  構成枚舉類型名的關鍵字。

3、export
  使用該關鍵字可實現模板函數的外部調用。對模板類型,可以在頭文件中聲明模板類和模板函數;在代碼文件中,使用關鍵字export來定義具體的模板類對象和模板函數;然後在其他用戶代碼文件中,包含聲明頭文件後,就可以使用該這些對象和函數。
4、extern
  當出現extern “C”時,表示 extern “C”之後的代碼按照C語言的規則去編譯;當extern修飾變量或函數時,表示其具有外部鏈接屬性,即其既可以在本模塊中使用也可以在其他模塊中使用。

5、public、protected、private
   這三個都爲權限修飾符。public爲公有的,訪問不受限制;protected爲保護的,只能在本類和友元中訪問;private爲私有的,只能在本類、派生類和友元中訪問。

6、template
    聲明一個模板,模板函數,模板類等。模板的特化。

7、static
    可修飾變量(靜態全局變量,靜態局部變量),也可以修飾函數和類中的成員函數。static修飾的變量的週期爲整個函數的生命週期。具有靜態生存期的變量,只在函數第一次調用時進行初始化,在沒有顯示初始化的情況下,系統把他們初始化微0.

8、struct、class、union
  用於類型聲明。class是一般的類類型。struct在C++中是特殊的類類型,聲明中僅默認隱式的成員和基類訪問限定與class不同(struct是public,class是private)。union是聯合體類型。滿足特定條件類類型——POD struct或POD union可以和C語言中的struct和union對應兼容。
注:POD類型(Plain Old Data),plain---代表普通類型,old---代表可以與C語言兼容。

9、mutable
  mutable也是爲了突破const的限制而設置的。被mutable修飾的變量,將永遠處於可變的狀態,即使在一個const函數中。

10、virtual
    聲明虛基類,虛函數。虛函數=0時,則爲純虛函數,純虛函數所在的類稱爲抽象類。

四、系統操作相關

1、catch、throw、try
   用於異常處理。try指定try塊的起始,try塊後的catch可以捕獲異常。異常由throw拋出。throw在函數中還表示動態異常規範。
2、new、delete
   new、delete屬於操作符,可以被重載。new表示向內存申請一段新的空間,申請失敗會拋出異常。new會先調用operator new函數,再在operator new函數裏調用malloc函數分配空間,然後再調構造函數。delete不僅會清理資源,還會釋放空間。delete縣調用析構函數,其次調用operator delete函數,最後在operator delete函數裏面調用free函數。malloc申請內存失敗會返回空。free只是清理了資源,並沒有釋放空間。
3、friend
  友元。使其不受訪問權限控制的限制。例如,在1個類中,私有變量外部是不能直接訪問的。可是假如另外1個類或函數要訪問本類的1個私有變量時,可以把這個函數或類聲明爲本類的友元函數或友元類。這樣他們就可以直接訪問本類的私有變量。
4、inline
   內聯函數,在編譯時將所調用的函數代碼直接嵌入到主調函數中。各個編譯器的實現方式可能不同。

5、operator   
   和操作符連用,指定一個重載了的操作符函數,比如,operator+。

6、register
  提示編譯器儘可能把變量存入到CPU內部寄存器中。

7、typename
    typename關鍵字告訴編譯器把一個特殊的名字解釋爲一個類型。

五、命名相關

1、using
     (1)、在當前文件引入命名空間,例using namespace std;
     (2)、在子類中使用,using聲明引入基類成員名稱。
2、namespace
  C++標準程序庫中的所有標識符都被定義於一個名爲std的namespace中。命名空間除了系統定義的名字空間之外,還可以自己定義,定義命名空間用關鍵字“namespace”,使用命名空間時用符號“::”指定。

3、typedef
    typedef聲明,爲現有數據類型創建一個新的名字。便於程序的閱讀和編寫。

六、函數和返回值相關

1、void
    特殊的"空"類型,指定函數無返回值或無參數。
2、return
  return表示從被調函數返回到主調函數繼續執行,返回時可附帶一個返回值,由return後面的參數指定。return通常是必要的,因爲函數調用的時候計算結果通常是通過返回值帶出的。如果函數執行不需要返回計算結果,也經常需要返回一個狀態碼來表示函數執行的順利與否(-1和0就是最常用的狀態碼),主調函數可以通過返回值判斷被調函數的執行情況.
3、sizeof
   返回類型名或表達式具有的類型對應的大小。
4、typeid
    typeid是一個操作符,返回結果爲標準庫種類型的引用。

七、其他


1、this
    每個類成員函數都隱含了一個this指針,用來指向類本身。this指針一般可以省略。但在賦值運算符重載的時候要顯示使用。靜態成員函數沒有this指針。
2、asm
   _asm是一個語句的分隔符。不能單獨出現,必須接彙編指令。一組被大括號包含的指令或一對空括號。
例:
    _asm
{
 mov al,2
      mov dx,0xD007
      out al,dx
}
也可以在每個彙編指令前加_asm
 _asm  mov al,2
      _asm  mov dx,0xD007
      _asm  out al,dx

3、*_cast
   即 const_cast、dynamic_cast、reinterpret_cast、static_cast。
   C++類型風格來性轉換。const_cast刪除const變量的屬性,方便賦值;dynamic_cast用於將一個父類對象的指針轉換爲子類對象的指針或引用;reinterpret_cast將一種類型轉換爲另一種不同的類型;static_cast用於靜態轉換,任何轉換都可以用它,但他不能用於兩個不相關的類型轉換。

 

備註:分類上有什麼建議可以下方留言,會參考修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章