1. 程式人生 > 其它 >c++11 新特性學習(1)

c++11 新特性學習(1)

1.原始字面量

在 C++11 中添加了定義原始字串的字面量,定義方式為:R “xxx(原始字串)xxx” 其中()兩邊的字串可以省略。原始字面量 R 可以直接表示字串的實際含義,而不需要額外對字串做轉義或連線等操作。(如\n \t縮排這種)

比如:程式設計過程中,使用的字串中常帶有一些特殊字元,對於這些字元往往要做專門的處理,使用了原始字面量就可以輕鬆的解決這個問題了,比如列印路徑:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str = "D:\hello\world\test.text
"; cout << str << endl; string str1 = "D:\\hello\\world\\test.text"; cout << str1 << endl; string str2 = R"(D:\hello\world\test.text)"; cout << str2 << endl; return 0; }

在 C++11 之前如果一個字串分別寫到了不同的行裡邊,需要加連線符,這種方式不僅繁瑣,還破壞了表示式的原始含義,如果使用原始字面量就變得簡單很多,很強直觀,可讀性強。

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str = R"(<html>
        <head>
        <title>
        海賊王
        </title>
        </head>
        <body>
        <p>
        我是要成為海賊王的男人!!!
        </p>
        </body>
        </html>)"
; cout << str << endl; return 0; }

2.指標空值型別

在 C++ 程式開發中,為了提高程式的健壯性,一般會在定義指標的同時完成初始化操作,或者在指標的指向尚未明確的情況下,都會給指標初始化為 NULL,避免產生野指標(沒有明確指向的指標,操作也這種指標極可能導致程式發生異常)。C++98/03 標準中,將一個指標初始化為空指標的方式有 2 種:

char *ptr = 0;
char *ptr = NULL;

在老版c++中NULL就是零

出於相容性的考慮,C++11 標準並沒有對 NULL 的巨集定義做任何修改,而是另其爐灶,引入了一個新的關鍵字 nullptr。nullptr 專用於初始化空型別指標,不同型別的指標變數都可以使用 nullptr 來初始化。

3.constexpr

在 C++11 之前只有 const 關鍵字,從功能上來說這個關鍵字有雙重語義:變數只讀,修飾常量,舉一個簡單的例子:

void func(const int num)
{
    const int count = 24;
    int array[num];            // error,num是一個只讀變數,不是常量
int array1[count]; // ok,count是一個常量 int a1 = 520; int a2 = 250; const int& b = a1; b = a2; // error a1 = 1314; cout << "b: " << b << endl; // 輸出結果為1314 }

1).靜態陣列初始化的時候[]中要是常量

2).func(const int num)函式nun不是常量,只是在函式中不能修改它的值

定義常量用constexpr,定義只讀用const

constexpr可以定義結構體物件

constexpr可以修飾函式(修飾返回值的)

1)宣告和定義要在main之上

2)修飾模板函式