C++ 關鍵字詳解

C++11 關鍵字共73個。html

 

  • volatile:類型修飾符type specifier,和 const 對應,A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided.   ide

volatile int i=0;a=i;b=i;函數

volatile 指出 i 是隨時可能發生變化的,每次使用它的時候必須從 i的地址中讀取,於是編譯器生成的彙編代碼會從新從i的地址讀取數據放在 b 中。而優化作法是,因爲編譯器發現兩次從 i讀數據的代碼之間的代碼沒有對 i 進行過操做,它會自動把上次讀的數據放在 b 中。而不是從新從 i 裏面讀。這樣以來,若是 i是一個寄存器變量或者表示一個端口數據就容易出錯,因此說 volatile 能夠保證對特殊地址的穩定訪問。優化

  • nullptr:C11空指針,https://www.cnblogs.com/DswCnblog/p/5629073.htmlspa

/* Define NULL pointer value */
#ifndef NULL
    #ifdef __cplusplus
        #define NULL    0
    #else  /* __cplusplus */
        #define NULL    ((void *)0)
    #endif  /* __cplusplus */
#endif  /* NULL */

NULL在C++中被明肯定義爲整數0,NULL在C中的定義.在C中,實質上是一個void *指針,C++是兼容C的,C++之因此作出這樣的選擇,根本緣由和C++的函數重載機制有關。咱們還有注意到NULL只是一個宏定義,而nullptr是一個C++關鍵字。它能夠轉換成任何指針類型和bool布爾類型(主要是爲了兼容普通指針能夠做爲條件判斷語句的寫法),可是不能被轉換爲整數。線程

char *p1 = nullptr;     // 正確
int  *p2 = nullptr;     // 正確
bool b = nullptr;       // 正確. if(b)判斷爲false
int a = nullptr;        // error
  • auto:關鍵字會根據初始值自動推斷變量的數據類型。C++98/03標準中,auto表示自動儲存類型 [6]  ;C++11標準中,auto表示由編譯器靜態判斷其應有的類型。
  • bool,true,false指針

  • break,continue,goto:break用於跳出for或while循環或switch。continue用於跳轉到循環起始。goto用於無條件跳轉到函數內的標號。htm

  • case,default,switch :對象

  • catch,throw,try:異常處理,try指定try塊的起始,try塊後的catch能夠捕獲異常。異常由throw拋出。throw在函數中還表示動態異常規範,但在C++11中被標記爲過期(由noexcept部分取代)。blog

  • const,volatile 

  • struct,class,union:用於類型聲明。class是通常的類類型。struct在C++中是特殊的類類型,聲明中僅默認隱式的成員和基類訪問限定與class不一樣(struct是public,class是private)。union是聯合體類型

  • delete,new

    delete單獨使用,表示釋放具備動態期對象,默認版本調用全局的去配器(deallocator)::operator delete和析構函數。new單獨使用,表示請求分配動態存儲期對象,默認版本調用全局的分配器(allocator)::operator new和指定的析構函數。和operator連用表示分別表示去配器(operator delete)和分配器(operator new),用於釋放分配器(allocator)的內存和分配內存。operator delete也在分配內存被異常中斷時被調用。

  • enum:構成枚舉類型名的關鍵字。C++11新增帶做用域的枚舉,用enum class或enum struct(二者等價)聲明

  • explicit

  • friend:聲明友元,使其不受訪問權限控制的限制。友元函數是指某些雖然不是類成員函數卻可以訪問類的全部成員的函數;友元類:友元類的全部成員函數都是另外一個類的友元函數,均可以訪問另外一個類中的隱藏信息(包括私有成員和保護成員)(1) 友元關係不能被繼承。(2) 友元關係是單向的,不具備交換性。(3) 友元關係不具備傳遞性 ;友元成員函數

  • inline:提示編譯時內聯——將所調用的代碼嵌入到主調函數中。爲了解決一些頻繁調用的小函數大量消耗棧空間(棧內存)的問題,棧空間就是指放置程序的局部數據(也就是函數內數據)的內存空間。

  • noexcept 在C++11中,聲明一個函數不能夠拋出任何異常使用關鍵字noexcept.

  • namespace 命名空間:命名空間能夠是不連續的,做用域運算符(::)一樣能夠用於全局做用域的成員;

    未命名的命名空間中定義的變量擁有靜態生命週期:它們在第一次使用前建立,而且直到程序結束才銷燬。一個未命名的命名空間能夠在某個給定的文件內不連續,可是不能跨越多個文件

C/C++預處理指令#define,#ifdef,#ifndef,#endif…

預處理指令是以#號開頭的代碼行。#號必須是該行除了任何空白字符外的第一個字符。#後是指令關鍵字,在關鍵字和#號之間容許存在任意個數的空白字符。整行語句構成了一條預處理指令,該指令將在編譯器進行編譯以前對源代碼作某些轉換。

 

C++中有4種存儲週期:

  1. automatic
  2. static
  3. dynamic
  4. thread ,thread_local變量是C++ 11新引入的一種存儲類型。它會影響變量的存儲週期(Storage duration) 有且只有thread_local關鍵字修飾的變量具備線程週期(thread duration),這些變量(或者說對象)在線程開始的時候被生成(allocated),在線程結束的時候被銷燬(deallocated)。而且每 一個線程都擁有一個獨立的變量實例(Each thread has its own instance of the object)。thread_local 能夠和static 與 extern關鍵字聯合使用,這將影響變量的連接屬性(to adjust linkage)。
相關文章
相關標籤/搜索