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...