C 11語法甜點

2021-06-06 01:54:46 字數 1111 閱讀 1357

c++ 11中引入了許多簡化程式設計工作的語法上的新特性,我們暫且美其名曰「語法甜點」。下面一一進行介紹。

語法甜點1:序列for迴圈

序列for迴圈是一種簡化的for迴圈,可用於遍歷一組序列,包括各種容器、string、陣列、初始化列表以及由begin和end函式定義的序列。示例**如下:

1  vectorvcttemp;

2  for (auto a : vcttemp)

3  複製** 

語法甜點2:委託建構函式

在引入c++ 11之前,如果某個類有多個過載的建構函式,且這些建構函式中有一些共同的初始化邏輯,通常都需要再編寫乙個帶引數的初始化函式,然後在這些建構函式中呼叫這個初始化函式。在c++ 11中,再也不用這麼麻煩了。我們可以實現乙個最基礎的建構函式,其他建構函式都呼叫這個建構函式。示例**如下:

1 class cperson

2 5  cperson(int nage) : cperson(nage, "")

6  cperson(int nage, const string &strname)

7  12 

13 private:

14  string m_strinfo;

15 };

複製**      

語法甜點3:統一的初始化語法

在引入c++ 11之前,有各種不同的初始化語法。在c++ 11中,仍可以使用這些初始化語法,但也可以選擇使用新引入的統一的初始化語法。統一的初始化語法用一對大括號{}表示,使用{}初始化語法還可有效地避免窄轉換。示例**如下:

1  int a;

2  char c;

3  int p[5] = ;

4  vectorvcttemp;

5  cperson person;

6   int b = 5.3;                     // b賦值成5,發生了窄轉換

7   int d;                      // 會提示編譯錯誤,避免了窄轉換

複製** 

語法甜點4:nullptr

nullptr是c++ 11中新加的乙個關鍵字,用於標識空指標。引入nullptr後,可以解決某些函式過載時的二義性問題。示例**如下:

C 11語法auto推導返回

c 不允許直接推導auto返回型別,如果要用auto返回型別,需要用decltype 宣告尾返回型別 如下面 template auto add a x,b y decltype x y 呼叫方式還是和普通的模板元函式一樣 std cout add 5,8 std endl std cout add...

C 11 擴充套件的friend語法

c 98的friend 參見很久以前的隨筆 友元 c 11擴充套件的friend 直接用 說明,示例如下 1 class poly 2typedef poly p 34 class lilei 5 89class jim 10 1314 class hanmeimei 15 宣告了3個型別 lile...

c 11特性之次要語法清除

首先,介紹的是兩個新特性在c 11中,他們是次要的,但是在日常程式設計很重要 空格在模版表示式中 要求輸入空格在兩個 之間 vector ok,在任何c 表示式中 vector ok 在c 11中 在這本書中 你會發現這兩種形式 nullptr和std nullptr t 在c 11中,你能夠使用n...