C 11的新特性

2021-10-12 14:54:11 字數 2492 閱讀 4836

c++11提供在類中定義類的資料成員,可以直接在成員之後新增=[預設值],當通過編譯器自動生成的預設建構函式初始化物件時,對應的資料成員就會被初始化成對應的預設值

class test

;int main()

在c++98中,陣列可以使用{}來進行初始化,對自定義型別是不可以的

在c++11中,{}的使用範圍變得更廣,可以使用{}來初始化乙個vector/list/string/map/set/multimap/multiset/unordered_map/unordered_set,在初始化時,可以新增=號,也可以不適用=號

int main()

; std::vectorv2;

std::listl1 = ;

std::listl2;

std::string s1 = ;

std::string s2;

std::mapm1 = , , };

std::mapm2, , };

std::setset1 = ;

std::setset2;

std::multimapmt_map1 = ,, };

std::multimapmt_map2,, };

std::multisetmt_set1 = ;

std::multisetmt_set2;

std::unordered_mapun_map1 = , , };

std::unordered_mapun_map2, , };

std::unordered_setun_set1 = ;

std::unordered_setun_set2;

return 0;

}

注意:經過測試,stack和queue是不適用於該特性的

c++11中可以使用auto來表明該變數的型別由編譯器在編譯時期推導得出

注意:

c++11提供一種基於迭代器的語法糖遍歷方式,它可以讓程式設計師遍歷乙個有範圍的容器時更加簡單

int main()

; for(auto& e:v)

return 0;

}

當編寫乙個類想要使用編譯器自動生成的預設成員函式時,只需要在函式的宣告/定義時在函式的後面加上=default即可

class test

;test& test::operator=(sonst test& t) = default;

當編寫**的過程中想要完全刪除某乙個預設成員函式時,在該函式的宣告後面加上=delete即可

class test

;

注意:

class test

};class test1 final

}

該關鍵字用於基類虛函式,用來確保派生類中對繼承自基類的虛函式進行了重寫,若派生類沒有進行重寫,則就會編譯報錯

右值引用的意義就在於消除了多種場景下進行的不必要的開銷,例如接收函式返回值時進行的一次拷貝構造,右值引用可以看作是對該行為的一種優化方式

左值

右值:在c++11中右值由兩個概念組成:純右值&將亡值

將亡值:c++11新增跟右值引用相關的表示式,這些表示式通常是將要被移動的物件。例如:返回值右值引用t&&,std::move的返回值,轉換為t&&的型別轉換函式的返回值

std::string test()

int main()

該介面的作用是將乙個左值強制型別轉換為右值引用,通過右值引用使用該值,實現移動語義

在傳遞引數時,有時候可能會使引數的屬性發生變化,完美**即就是不改變引數的任何屬性進行傳參。

void func(const int n)

{}int main()

c++11對執行緒進行了支援,在併發程式設計時不需要第三方庫,直接使用標準庫的標頭檔案

c++11引用了一系列原子操作,包含在標準庫檔案中

c 11的新特性

1 型別說明符auto 2.decltype提取型別 int a 0 decltype a b b 10 cout b endl 3.基於範圍的for迴圈 4.虛函式的override和final指示符 final修飾類 類無法被繼承 final修飾虛函式 虛函式不能被重寫 override就是輔助...

C 11的新特性

1.auto關鍵字 編譯器可以根據初始值自動推導出型別。但是不能用於函式傳參以及陣列型別的推導。2.nullptr關鍵字 nullptr是一種特殊型別的字面值,它可以被轉換成任意其它的指標型別 而null一般被巨集定義為0,在遇到過載時可能會出現問題。3.智慧型指標 c 11新增了std share...

C 11的新特性

1.auto自動變數 vs 2010支援 2.c 11新增模板類array c 11支援對模板類vector的列表初始化。3.c 11新增了另一種引用,右值引用,是使用 宣告的 double j 15.0 double jref 2.0 j 18.5 不能使用double 宣告jref 4.c 11...