中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

忍不住在樓道里面做免費(fèi)網(wǎng)站千萬(wàn)不要學(xué)網(wǎng)絡(luò)營(yíng)銷

忍不住在樓道里面做免費(fèi)網(wǎng)站,千萬(wàn)不要學(xué)網(wǎng)絡(luò)營(yíng)銷,肇慶自助建站模板,網(wǎng)站維護(hù)要多久時(shí)間前言:本篇文章將分享一些C11版本所產(chǎn)生的一些新的技術(shù)以及對(duì)老版本的優(yōu)化。 目錄 一.C11簡(jiǎn)介 二.統(tǒng)一的列表初始化 1.{}初始化 2.std::initializer_list 三.右值引用和移動(dòng)語(yǔ)義 1.左值引用和右值引用 2.兩者的比較 (1)左值引用 &#…

前言:本篇文章將分享一些C++11版本所產(chǎn)生的一些新的技術(shù)以及對(duì)老版本的優(yōu)化。


目錄

一.C++11簡(jiǎn)介

二.統(tǒng)一的列表初始化

1.{}初始化

2.std::initializer_list

三.右值引用和移動(dòng)語(yǔ)義

1.左值引用和右值引用

?2.兩者的比較

(1)左值引用

?(2)右值引用

3.移動(dòng)語(yǔ)義

4.萬(wàn)能引用

四.lambda表達(dá)式

1.基礎(chǔ)使用

2.捕捉列表

五.可變模板參數(shù)

六.function包裝器
???????


一.C++11簡(jiǎn)介

C++11是C++委員會(huì)自C++03起,經(jīng)歷了近10年的時(shí)間所進(jìn)行的又一次更新。相比于C++98/03,C++11帶來(lái)了數(shù)量可觀的變化,其中包含了約140個(gè)新特性,以及對(duì)C++03標(biāo)準(zhǔn)中約600個(gè)缺陷的修正,這使得C++11更像是從C++98/03中孕育出的一種新語(yǔ)言。

相比較而言,C++11能更好地用于系統(tǒng)開發(fā)和庫(kù)開發(fā)、語(yǔ)法更加泛華和簡(jiǎn)單化、更加穩(wěn)定和安全,不僅功能更強(qiáng)大,而且能提升程序員的開發(fā)效率,公司實(shí)際項(xiàng)目開發(fā)中也用得比較多,所以我們要作為一個(gè)重點(diǎn)去學(xué)習(xí)。

本文主要分享一些實(shí)際中比較實(shí)用的語(yǔ)法。


二.統(tǒng)一的列表初始化

1.{}初始化

在C++98中,標(biāo)準(zhǔn)允許使用花括號(hào){}對(duì)數(shù)組或者結(jié)構(gòu)體元素進(jìn)行統(tǒng)一的列表初始值設(shè)定。比如:

struct Point
{int _x;int _y;
};
int main()
{Point p = { 1, 2 };return 0;
}

?C++11擴(kuò)大了用花括號(hào)括起的列表(初始化列表)的使用范圍使其可用于所有的內(nèi)置類型和用戶自定義的類型,使用初始化列表時(shí),可添加等號(hào)(=),也可不添加

class Date
{
public:Date(int year, int month, int day):_year(year),_month(month),_day(day){}
private:int _year;int _month;int _day;
};
int main()
{Date d1(2022, 1, 1); // old style// C++11支持的列表初始化,這里會(huì)調(diào)用構(gòu)造函數(shù)初始化Date d2{ 2022, 1, 2 };Date d3 = { 2022, 1, 3 };return 0;
}

2.std::initializer_list

std::initializer_list一般是作為構(gòu)造函數(shù)的參數(shù),C++11對(duì)STL中的不少容器就增加std::initializer_list作為參數(shù)的構(gòu)造函數(shù),這樣初始化容器對(duì)象就更方便了。也可以作為operator=的參數(shù),這樣就可以用大括號(hào)賦值

vector(initializer_list<T> l)
{resize(l.size());for (auto& e : l){push_back(e);}
}

?initializer_list包含兩個(gè)指針,一個(gè)指向常量數(shù)組的開始,一個(gè)指向常量數(shù)組的結(jié)尾的下一個(gè)位置

構(gòu)造函數(shù)的本質(zhì)就是遍歷l,將其數(shù)據(jù)一個(gè)一個(gè)尾插進(jìn)容器。

int main()
{vector<int> v = { 1,2,3,4 };// 這里{"sort", "排序"}會(huì)先初始化構(gòu)造一個(gè)pair對(duì)象map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} };// 使用大括號(hào)對(duì)容器賦值v = {10, 20, 30};return 0;
}

三.右值引用和移動(dòng)語(yǔ)義

1.左值引用和右值引用

左值是一個(gè)表示數(shù)據(jù)的表達(dá)式(如變量名或解引用的指針),我們可以獲取它的地址+可以對(duì)它賦值左值可以出現(xiàn)賦值符號(hào)的左邊,也可以出現(xiàn)在賦值符號(hào)的右邊。定義時(shí)const修飾符后的左值,不能給他賦值,但是可以取它的地址。左值引用就是給左值的引用,給左值取別名。

// 以下的p、b、c都是左值
int* p = new int(0);
int b = 1;
const int c = 2;

?右值也是一個(gè)表示數(shù)據(jù)的表達(dá)式,如:字面常量、表達(dá)式返回值,函數(shù)返回值(這個(gè)不能是左值引用返回)等等右值可以出現(xiàn)在賦值符號(hào)的右邊,但是不能出現(xiàn)出現(xiàn)在賦值符號(hào)的左邊,右值不能取地址右值引用就是對(duì)右值的引用,給右值取別名。

// 以下幾個(gè)都是常見的右值
10;
x + y;
fmin(x, y);

對(duì)左值引用,我們使用單&符號(hào)

// 以下幾個(gè)是對(duì)上面左值的左值引用
int*& rp = p;
int& rb = b;
const int& rc = c;
int& pvalue = *p;?
?

而對(duì)右值引用,我們則需使用雙&&符號(hào):?

// 以下幾個(gè)都是對(duì)右值的右值引用
int&& rr1 = 10;
double&& rr2 = x + y;
double&& rr3 = fmin(x, y);
?


?2.兩者的比較

(1)左值引用

  1. 左值引用只能引用左值,不能引用右值。
  2. 但是const左值引用既可引用左值,也可引用右值。
  3. 左值引用是給原值另起一個(gè)別名,兩者共用一個(gè)地址。?

int main()
{
????// 左值引用只能引用左值,不能引用右值。
????int a = 10;
????int& ra1 = a; ??// ra為a的別名
????//int& ra2 = 10; ??// 編譯失敗,因?yàn)?0是右值
????// const左值引用既可引用左值,也可引用右值。
????const int& ra3 = 10;
????const int& ra4 = a;
????return 0;
}
?

?(2)右值引用

  1. 右值引用只能右值,不能引用左值。
  2. 但是右值引用可以move以后的左值。
  3. 右值引用本身是左值。
  4. 右值引用是直接搶奪資源。

int main()
{
?// 右值引用只能右值,不能引用左值。
?int&& r1 = 10;


?// error : “初始化”: 無(wú)法從“int”轉(zhuǎn)換為“int &&”
?// message : 無(wú)法將左值綁定到右值引用
?int a = 10;
?int&& r2 = a;


?// 右值引用可以引用move以后的左值
?int&& r3 = std::move(a);//(move后邊會(huì)分享)
?return 0;
}

如上例,?r3右值引用a之后,r3得到a的數(shù)據(jù)和地址,而a本身則不再具有資源和地址


3.移動(dòng)語(yǔ)義

在我們之前所分享的各種容器中,都擁有構(gòu)造函數(shù)和賦值函數(shù),在C++11之前,這兩個(gè)函數(shù)都是通過(guò)左值引用來(lái)作為參數(shù),但是C++11之后,我們可以用右值引用作為參數(shù),而兩種函數(shù)名也變?yōu)橐苿?dòng)構(gòu)造和移動(dòng)賦值

// 移動(dòng)構(gòu)造string(string&& s):_str(nullptr),_size(0),_capacity(0){cout << "string(string&& s) -- 移動(dòng)語(yǔ)義" << endl;swap(s);}// 移動(dòng)賦值string& operator=(string&& s){cout << "string& operator=(string&& s) -- 移動(dòng)語(yǔ)義" << endl; swap(s);return *this;}

移動(dòng)構(gòu)造和移動(dòng)賦值,相較于傳統(tǒng)的構(gòu)造函數(shù)和賦值函數(shù),因?yàn)橛抑狄每梢灾苯訆Z舍資源,所以就避免了需要?jiǎng)?chuàng)建一個(gè)新的對(duì)象來(lái)進(jìn)行資源交換這些繁瑣的過(guò)程,大大提高了效率。?


4.萬(wàn)能引用

template<typename T>

void fun(T&& t)

{}

函數(shù)模版里的右值引用,稱為萬(wàn)能引用,可以傳左值,右值,const左值及const右值,均會(huì)自動(dòng)識(shí)別。

但是這里存在一個(gè)問題,因?yàn)?span style="color:#fe2c24;">右值引用本身再下一次傳遞時(shí)會(huì)被識(shí)別為左值,所以我們需要添加?xùn)|西來(lái)保持右值的本身屬性,而執(zhí)行該步驟的是完美轉(zhuǎn)發(fā)

?std::forward<T>(參數(shù)t)

完美轉(zhuǎn)發(fā)可以保證在傳參過(guò)程中參數(shù)會(huì)保持其原生類型屬性。


四.lambda表達(dá)式

1.基礎(chǔ)使用

在C++11到來(lái)之前,我們想對(duì)一個(gè)數(shù)據(jù)集合進(jìn)行排序,可以通過(guò)使用sort函數(shù),而遇到自定義類型的數(shù)據(jù)時(shí),如果想要進(jìn)行排序,我們分享過(guò)使用仿函數(shù)來(lái)進(jìn)行排序。

但是仿函數(shù)的寫法未免有些復(fù)雜和繁瑣,所以C++11中就增加了對(duì)自定義類型的數(shù)據(jù)進(jìn)行排序的lambda表達(dá)式,其本質(zhì)為匿名函數(shù)對(duì)象。

其結(jié)構(gòu)為:

[捕捉列表] (參數(shù)) mutable?-> 返回值類型?{ 函數(shù)體?}

默認(rèn)情況下lambda表達(dá)式具有常性如果要取消其常性,則需添加上述表達(dá)式的mutable

當(dāng)我們僅使用該表達(dá)式可以省略捕捉列表和返回值類型。該表達(dá)式的返回值,可以使用auto類型的數(shù)據(jù)進(jìn)行接收:

auto fun1 = [](int a,int b)->{return a > b;};

auto fun1 = [](int a,int b){return a > b;};

上述表達(dá)式中的->也是可以省略的。


2.捕捉列表

int a = 1,b = 2;

auto swap = [a,b]()

{}

捕捉常量可以使lambda表達(dá)式捕捉到a,b的一份拷貝,但是默認(rèn)為const類型,無(wú)法對(duì)其進(jìn)行交換,如果需要,則需添加multable取消其常性

但是就算添加了multable可以進(jìn)行交換,但依然只是交換了拷貝,并不影響a,b本身。如果想要交換a,b本身,就需要傳引用:

int a = 1,b = 2;

auto swap = [&a,&b]()

{}

此種捕捉方式,只能是我們傳什么,就捕捉什么。除此之外,我們還可以一次性捕捉父作用域中的全部對(duì)象

?int a = 1,b = 2,c = 3,d = 4, e = 5;

auto swap = [=]()

{}

傳“=”可以一次性捕捉所有對(duì)象,而傳“&”則是一次性捕捉所有引用:?

?int a = 1,b = 2,c = 3,d = 4, e = 5;

auto swap = [&]()

{}

另外,我們還可以混合捕捉

?int a = 1,b = 2,c = 3,d = 4, e = 5;

auto swap = [&a,&b,c,e]()

{}


五.可變模板參數(shù)

前邊我們分享過(guò)什么是可變參數(shù),即函數(shù)的參數(shù)數(shù)量并不固定,可以隨心所欲的添加參數(shù),例如最常用的scanf和printf兩個(gè)函數(shù)。在C++11中,大佬們?yōu)槟0嬉苍O(shè)計(jì)了可變參數(shù),具體結(jié)構(gòu)如下:

// Args是一個(gè)模板參數(shù)包,args是一個(gè)函數(shù)形參參數(shù)包
// 聲明一個(gè)參數(shù)包Args...args,這個(gè)參數(shù)包中可以包含0到任意個(gè)模板參數(shù)。
template <class ...Args>
void ShowList(Args... args)
{}

上面的參數(shù)args前面有省略號(hào),所以它就是一個(gè)可變模版參數(shù),我們把帶省略號(hào)的參數(shù)稱為“參數(shù)包”,它里面包含了0到N(N>=0)個(gè)模版參數(shù)。?


六.function包裝器

包裝器function是一種類模板,使用包裝器需要添加頭文件include<functional>,其結(jié)構(gòu)為:

function<返回值類型(參數(shù)類型...)> 包裝器名字

包裝器可以使用的場(chǎng)景針對(duì)于可調(diào)用對(duì)象,包括函數(shù)指針,函數(shù)對(duì)象,lambda表達(dá)式,以及類的成員函數(shù)。

所謂包裝器,就是給上述舉例的這些包裝一個(gè)相同的外殼,使它們調(diào)用起來(lái)更加方便統(tǒng)一

#include <functional>
int f(int a, int b)
{return a + b;
}
struct Functor
{
public:int operator() (int a, int b){return a + b;}
};
class Plus
{
public:static int plusi(int a, int b){return a + b;}double plusd(double a, double b){return a + b;}
};
int main()
{// 函數(shù)名(函數(shù)指針)std::function<int(int, int)> func1 = f;cout << func1(1, 2) << endl;// 函數(shù)對(duì)象std::function<int(int, int)> func2 = Functor();cout << func2(1, 2) << endl;// lamber表達(dá)式std::function<int(int, int)> func3 = [](const int a, const int b) {return a + b; };cout << func3(1, 2) << endl;// 類的成員函數(shù)std::function<int(int, int)> func4 = &Plus::plusi;cout << func4(1, 2) << endl;std::function<double(Plus, double, double)> func5 = &Plus::plusd;cout << func5(Plus(), 1.1, 2.2) << endl;return 0;
}

結(jié)語(yǔ)

關(guān)于C++11就分享這么多,喜歡本篇文章記得一鍵三連,我們下期再見!

http://www.risenshineclean.com/news/46172.html

相關(guān)文章:

  • 網(wǎng)站下方一般放什么原因宣傳推廣策略
  • 計(jì)算機(jī)專業(yè)里面哪個(gè)專業(yè)最好攀枝花seo
  • 營(yíng)銷型網(wǎng)站一套東莞seo網(wǎng)站優(yōu)化排名
  • 哈爾濱住房和城鄉(xiāng)建設(shè)廳網(wǎng)站品牌推廣方案怎么寫
  • 鐵道部網(wǎng)上訂票網(wǎng)站素材網(wǎng)站分析案例
  • 家居飾品網(wǎng)站建設(shè)論文怎么在百度上推廣自己的產(chǎn)品
  • 動(dòng)態(tài)網(wǎng)站與靜態(tài)網(wǎng)站的區(qū)別北京百度seo服務(wù)
  • 020模版網(wǎng)站制作網(wǎng)絡(luò)營(yíng)銷的推廣方式
  • 51自學(xué)網(wǎng)官方網(wǎng)站百度廣告電話號(hào)碼
  • 各大網(wǎng)站做推廣的廣告怎么做做引流的公司是正規(guī)的嗎
  • 肇慶網(wǎng)站建設(shè)公司凡科小程序
  • 網(wǎng)站設(shè)計(jì)開發(fā)人員國(guó)家高新技術(shù)企業(yè)名單
  • 電影網(wǎng)站建設(shè)多少錢百度網(wǎng)站入口
  • 做網(wǎng)站排名費(fèi)用多少百度風(fēng)云榜明星
  • 手機(jī)網(wǎng)站有什么區(qū)別嗎廣告推廣平臺(tái)代理
  • 做公司網(wǎng)站的目的是什么網(wǎng)絡(luò)推廣運(yùn)營(yíng)是做什么
  • 渭南公司做網(wǎng)站蘇州seo關(guān)鍵詞優(yōu)化價(jià)格
  • 做高端網(wǎng)站的網(wǎng)絡(luò)公司谷歌排名優(yōu)化入門教程
  • 有沒有免費(fèi)的網(wǎng)站軟件3步打造seo推廣方案
  • 太原做網(wǎng)站的通訊公司yy直播
  • 網(wǎng)站制作與網(wǎng)站建設(shè)實(shí)際報(bào)告百度競(jìng)價(jià)排名推廣
  • 怎么在百度知道做公司網(wǎng)站不收費(fèi)的小說(shuō)網(wǎng)站排名
  • 商務(wù)網(wǎng)站建設(shè)數(shù)據(jù)處理100個(gè)免費(fèi)推廣b站
  • 做網(wǎng)站圖片尺寸全球搜索引擎大全
  • python做網(wǎng)站源碼深圳網(wǎng)站營(yíng)銷seo費(fèi)用
  • 做3D打印樣品用什么外貿(mào)網(wǎng)站好2345網(wǎng)址大全
  • wordpress 登陸后查看seo引擎優(yōu)化
  • 長(zhǎng)沙手機(jī)網(wǎng)站開發(fā)百度seo推廣計(jì)劃類型包括
  • 建設(shè)網(wǎng)站合同2021百度熱搜年度榜
  • wordpress 中英文網(wǎng)站模板軟文寫手接單平臺(tái)