C++11新特性的總結

C++11新特性

  1. auto關鍵字(C++11)基于范圍的for循環(C++11). 指針空值nullptr(C++11)
  2. C++動態內存管理
  3. 序列式容器 array forward_list;
  4. 繼承和多態:final override
  5. delete:不生成默認的成員函數
  6. default:強制編譯器生成默認的成員函數
  7. 智能指針:unique_ptr,shared_ptr,weak_ptr
  8. 哈希結構的關聯式容器:unordered系列

統一的初始化

C++98中標準允許使用花括號{}對數組元素進行統一的列表初始值設定

int array1[] = {1,2,3,4,5};
int array2[5] = {0};

對于vector容器來說不能這樣初始化

vector<int> v{1,2,3,4,5};

就無法通過編譯,導致每次定義vector時,都需要先把vector定義出來,然后使用循環對其賦初始值,非常不方便。
C++11擴大了用大括號括起的列表(初始化列表)的使用范圍,使其可用于所有的內置類型和用戶自定義的類型,使用初始化列表時,可添加等號(=),也可不添加

內置類型花括號{}初始化

	// 內置類型變量int x1 = { 10 };int x2{ 10 };int x3 = 1 + 2;int x4 = { 1 + 2 };int x5{ 1 + 2 };int x6{ x1 + x2 };// 數組int arr1[5] {1, 2, 3, 4, 5};int arr2[]{1, 2, 3, 4, 5};// 動態數組,在C++98中不支持int* arr3 = new int[5]{1, 2, 3, 4, 5};// 標準容器vector<int> v{ 1, 2, 3, 4, 5 };map<int, int> m{ { 1, 1 }, { 2, 2, }, { 3, 3 }, { 4, 4 } };

單個自定義類型列表初始化

class Point
{
public:Point(int x = 0, int y = 0) : _x(x), _y(y){}
private:int _x;int _y;
};
int main()
{//兩種初始化都可以Point p{ 1, 2 };Point p2(1, 2);return 0;
}

多個自定義類型列表初始化

多個對象想要支持列表初始化,需給該類(模板類)添加一個帶有initializer_list類型參數的構造函數即可。注意:initializer_list是系統自定義的類模板,該類模板中主要有三個方法:begin()、end()迭代器以及獲取區間中元素個數的方法size()。

template<class T>class vector{public:vector():_start(nullptr), _finish(nullptr), _endofstorage(nullptr){}vector(initializer_list<T>l):_start(new T[l.size()]){_finish = _start;for (auto e : l){*_finish++ = e;}}private:T* _start;T* _finish;T* _endofstorage;};

變量類型推導

auto推導

auto總結

decltype類型推導

auto使用的前提是:必須要對auto聲明的類型進行初始化,否則編譯器無法推導出auto的實際類型

template<class T1,class T2>
//返回的時候,返回T1和T2都不行,應該返回T1+T2后的值的類型
auto Add(const T1& left, const T2& right)
{return left + right;
}

如果能用加完之后結果的實際類型作為函數的返回值類型就不會出錯,但這需要程序運行完才能知道結果的
實際類型,即RTTI(Run-Time Type Identification 運行時類型識別)。

  • typeid只能查看類型不能用其結果類定義類型
  • dynamic_cast只能應用于含有虛函數的繼承體系中
所以需要新的關鍵字

decltype是根據表達式的實際類型推演出定義變量時所用的類型,例如:返回值類型推演

//此處auto為占位符
//返回值類型追蹤
auto  Add( T1& left,  T2& right)->decltype(left+right)
{return left + right;//ret = left + right;
}int main()
{int a = 1;double b = 2.0;cout<< Add(a, b);return 0;
}

范圍for循環

范圍for

final和override

多態中總結過

智能指針

智能指針總結

新增容器----靜態數組array,forward_list以及unordered系列

委派構造函數

所謂委派構造函數:就是指委派函數將構造的任務委派給目標構造函數來完成的一種類構造的方式。
在初始化列表中調用”基準版本”的構造函數稱為委派構造函數,而被調用的”基準版本”則稱為目標構造函數。
注意:構造函數不能同時”委派”和使用初始化列表。

class Info {
public:Info() : _type(0), _name('a'){InitRSet();}Info(int type) :Info()//不能再在初始化列表中初始化其它的成員變量//,_type(type){//InitRSet();_type = type;}Info(char type) :Info(){//InitRSet();_type = type;}
private:void InitRSet() {//初始化其他變量}
private:int _type;char _name;//...
};
  • 委派構造函數同時可以是目標構造函數
  • 切記:環狀委派 依然可以通過編譯但是會右棧溢出

右值引用

右值引用的總結

默認函數控制

C++11讓程序員可以控制是否需要編譯器生成那些默認生成的函數

顯式缺省函數

在C++11中,可以在默認函數定義或者聲明時加上=default,從而顯式的指示編譯器生成該函數的默認版本,用=default修飾的函數稱為顯式缺省函數

class A
{
public:A(int a): _a(a){}// 顯式缺省構造函數,由編譯器生成A() = default;// 在類中聲明,在類外定義時讓編譯器生成默認賦值運算符重載A& operator=(const A& a);
private:int _a;
};A& A::operator=(const A& a) = default;
int main()
{A a1(10);A a2;a2 = a1;return 0;
}

刪除默認函數

如果能想要限制某些默認函數的生成,在C++98中,是該函數設置成private,并且不給定義,這樣只要其他人想要調用就會報錯。在C++11中更簡單,只需在該函數聲明加上=delete即可,該語法指示編譯器不生成對應函數的默認版本,稱=delete修飾的函數為刪除函數

class A
{
public:A(int a): _a(a){}// 禁止編譯器生成默認的拷貝構造函數以及賦值運算符重載A(const A&) = delete;A& operator(const A&) = delete;
private:int _a;
};
int main()
{A a1(10);// 編譯失敗,因為該類沒有拷貝構造函數//A a2(a1);// 編譯失敗,因為該類沒有賦值運算符重載A a3(20);a3 = a2;return 0;
}

注意:避免刪除函數和explicit一起使用

缺省參數

lambda表達式和線程庫

lambda表達式和線程庫的總結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/383094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383094.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳解C++中右值引用

98中的引用 概念特性引用的使用場景三種傳參方式效率的比較探索:引用的底層實現方式----->指針 T&------>T* constconst T&---->const T*const 引用和指針的區別 引用的總結 11中的右值引用 為什么要有右值引用 為了提高程序運行效率&#xff0c;C11中引…

C++中的lambda表達式和線程庫

98中的一個例子 如果想要對一個數據集合中的元素進行排序&#xff0c;可以使用std::sort方法 #include <algorithm> #include <functional> int main() {int array[] {4,1,8,5,3,7,0,9,2,6};// 默認按照小于比較&#xff0c;排出來結果是升序std::sort(array, a…

文件壓縮(Huaffman樹的概念及其實現)

什么是壓縮 想辦法讓源文件變得更小并能還原。 為什么要進行文件壓縮 文件太大&#xff0c;節省空間提高數據再網絡上傳輸的效率對數據有保護作用—加密 文件壓縮的分類 無損壓縮 源文件被壓縮后&#xff0c;通過解壓縮能夠還原成和源文件完全相同的格式 有損壓縮 解壓縮之…

詳解STL中的空間配置器(SGI版本)

空間配置器 1.什么是空間配置器 為各個容器高效的管理空間(空間的申請與回收)的 2.為什么需要空間配置器 各種容器----->可以存放元素---->底層需要空間 new 申請空間 operator new ---->malloc調用構造函數------完成對象的構造 動態內存管理總結 前面的容器…

【劍指offer】_15數組中重復的數字

題目描述 在一個長度為n的數組里的所有數字都在0到n-1的范圍內。 數組中某些數字是重復的&#xff0c;但不知道有幾個數字是重復的。也不知道每個數字重復幾次。請找出數組中任意一個重復的數字。 例如&#xff0c;如果輸入長度為7的數組{2,3,1,0,2,5,3}&#xff0c;那么對應的…

【劍指offer】_16 構建乘積數組

題目描述 給定一個數組A[0,1,…,n-1],請構建一個數組B[0,1,…,n-1],其中B中的元素B[i]A[0]*A[1]*...*A[i-1]*A[i1]*...*A[n-1]。不能使用除法。 解題思路 設有數組大小為5。 對于第一個for循環 第一步&#xff1a;b[0] 1; 第二步&#xff1a;b[1] b[0] * a[0] a[0] 第三…

【劍指offer】_17正則表達式的匹配

題目描述 請實現一個函數用來匹配包括’.‘和*的正則表達式。模式中的字符’.表示任意一個字符&#xff0c;而*表示它前面的字符可以出現任意次&#xff08;包含0次&#xff09;。 在本題中&#xff0c;匹配是指字符串的所有字符匹配整個模式。例如&#xff0c;字符串"aaa…

大四階段的社會實踐的主要目的是_疫情當前,大三大四的學生“很慘”?大一大二的學生也別松懈...

大四畢業生不容易這次疫情對于高校學生而言&#xff0c;可以說是各有各的難處&#xff0c;“這屆畢業生很慘”更是屢上熱搜。不可否認&#xff0c;大四畢業生確實很不容易&#xff0c;論文答辯、畢業、求職就業等都受到了影響&#xff0c;雖然有困難&#xff0c;但各方都在積極…

【劍指offer】_18 數據流中的中位數

題目描述 如何得到一個數據流中的中位數&#xff1f;如果從數據流中讀出奇數個數值&#xff0c;那么中位數就是所有數值排序之后位于中間的數值。如果從數據流中讀出偶數個數值&#xff0c;那么中位數就是所有數值排序之后中間兩個數的平均值。我們使用Insert()方法讀取數據流…

【劍指offer】_19 滑動窗口中的最大值

題目描述 給定一個數組和滑動窗口的大小&#xff0c;找出所有滑動窗口里數值的最大值。例如&#xff0c;如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3&#xff0c;那么一共存在6個滑動窗口&#xff0c;他們的最大值分別為{4,4,6,6,6,5}&#xff1b; 針對數組{2,3,4,2,6,2,…

android 文字反轉_多文字共享信息系統

歐陽貴林 www.HeZi.net首發表于2016年03月23日“ 處在信息時代的開端&#xff0c;信息技術不應有特殊的文字性&#xff0c;需要創建多文字共享信息系統&#xff0c;給各國文字一個公平的參與信息與科技創新發展的平臺。這是世界的事&#xff0c;更是中國事。”01人類語言語言文…

LeetCode【1--兩數之和】 LeetCode【2--兩數相加】

兩數之和 題目描述 給定一個整數數組 nums 和一個目標值 target&#xff0c;請你在該數組中找出和為目標值的那 兩個 整數&#xff0c;并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;你不能重復利用這個數組中同樣的元素。 解題思路 直接兩…

input數字開頭不能為0_李商隱為初戀寫詩,每句以數字開頭,最后10字一直被仿從未被超越...

上學時&#xff0c;每次寫作文&#xff0c;老師總愛在耳邊念叨&#xff1a;“你的作文得讓閱卷老師看得懂&#xff0c;不然不可能給你高分的&#xff01;”每次聽到話&#xff0c;筆者總是用李商隱的詩來和他斗嘴。是的&#xff0c;李商隱的詩作常常是讓人讀不懂的&#xff0c;…

lsass.exe 當試圖更新密碼時_“驅動人生”下載器木馬再度更新-你應該注意什么?...

360安全大腦監測到通過"驅動人生"供應鏈攻擊傳播的挖礦木馬在1月30日下午4時左右再次更新。此次更新中&#xff0c;木馬在此前抓取系統帳戶密碼的基礎上增加了抓取密碼hash值的功能&#xff0c;并試圖通過pass the hash攻擊進行橫向滲透&#xff0c;使得該木馬的傳播…

LeetCode【3--無重復的最長字串】 LeetCode【4--有序數組中的中位數】

無重復的最長字串 題目描述 給定一個字符串&#xff0c;請你找出其中不含有重復字符的 最長子串 的長度。 解題思路 看到這道題&#xff0c;其實就兩個步驟&#xff0c;遍歷字符串&#xff0c;記錄當前字符有沒有重復。 重復一般解決就是哈希&#xff0c;這里用個數組表示…

hwt字體轉換ttf_五分鐘教你弄懂了字體反爬是個啥

今天的文章內容主要是關于字體反爬。目前已知的幾個字體反爬的網站是貓眼&#xff0c;汽車之家&#xff0c;天眼查&#xff0c;起點中文網等等。以前也看過這方面的文章&#xff0c;今天跟個老哥在交流的時候&#xff0c;終于實操了一把&#xff0c;弄懂了字體反爬是個啥玩意。…

LeetCode【5--最長的回文子串】 LeetCode【6--Z字形變換】

最長的回文子串 題目描述 給定一個字符串 s&#xff0c;找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。 解題思路 可以跟無重復的最長子串一樣&#xff0c;用一個滑動窗口&#xff0c;只不過這個窗口的右邊界往右&#xff0c;左邊界每回要從右邊界的下標往左…

androidstudio 日歷視圖怎么顯示農歷_中秋國慶旅游攻略怎么做?用這個便簽軟件很簡單...

九月已經到來&#xff0c;中秋節和國慶節距離我們也不遠了&#xff0c;今年的中秋和國慶節重疊了有足足八天的假期。不少人都想趁著這個小長假出門旅游&#xff0c;要想保證旅游質量&#xff0c;那么就要做好攻略。中秋國慶旅游攻略怎么做&#xff1f;要想做好一份中秋國慶旅游…

c++ select函數_PySpark 操作函數一覽

PySpark 操作函數一覽Created: Sep 14, 2020 10:28 AM Tags: Big Data, PySpark, Python, SparkPyspark.sql.functionsfrom pyspark.sql import functions as F函數使用說明基本數學函數類abssin、cos、tan、asin、acos 、atan、sinh、cosh、tanhceil、round、floorexp、log、l…

LeetCode【7--整數反轉】 LeetCode【8--字符串轉整數】

整數反轉 題目描述 給出一個 32 位的有符號整數&#xff0c;你需要將這個整數中每位上的數字進行反轉。 解題思路 x%10 取一位&#xff0c;x/10下一位&#xff0c;注意越界&#xff0c; 代碼實現 class Solution { public:int reverse(int x) {int sum 0;while(x){if(s…