溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++?auto自動(dòng)類(lèi)型推導(dǎo)規(guī)則是什么及怎么使用

發(fā)布時(shí)間:2022-08-18 09:20:33 來(lái)源:億速云 閱讀:202 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“C++ auto自動(dòng)類(lèi)型推導(dǎo)規(guī)則是什么及怎么使用”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++ auto自動(dòng)類(lèi)型推導(dǎo)規(guī)則是什么及怎么使用”文章能幫助大家解決問(wèn)題。

一.auto推導(dǎo)規(guī)則4點(diǎn)

(1) 引用不是類(lèi)型,因此auto不能推斷出引用

int a = 1;
int& b = a;// b-> int&  用->表示推導(dǎo)出類(lèi)型,下同
auto c = b;// c->int

(2)auto 在推斷引用的類(lèi)型時(shí),會(huì)直接將引用替換為引用指向的對(duì)象。

引用不是對(duì)象,任何引用的地方都可以直接替換為引用指向的對(duì)象。

int a = 10;
const int& b = a ;// b-> const int&
auto c = b;  //  c-> int 
//相當(dāng)于 auto c = a;

由于在傳遞值時(shí),修改這個(gè)值不會(huì)對(duì)原有的數(shù)據(jù)造成影響,而傳遞引用時(shí),修改這個(gè)值會(huì)對(duì)修改原有的數(shù)據(jù)。

(3)auto 關(guān)鍵字推斷類(lèi)型時(shí),如果沒(méi)有引用符號(hào),那么會(huì)忽略值類(lèi)型的const修飾,而保留修飾指向?qū)ο蟮腸onst

const int i =1;
auto j = i;//j-> int
int a ;
const int* const pi = &a;//第一個(gè)const 修飾指針的指向的對(duì)象,第二個(gè)const修飾pi指向的值。
                         //會(huì)忽略第二個(gè)const。
auto pi2 = pi;  // pi2 -> int* const

(4)如果有引用符號(hào),那么值類(lèi)型的const和指向的const都會(huì)保留。

int i = 1;
const int* const j = &i;
auto &k = j; //a->const int const &

具體推導(dǎo)例子:

int x = 10;

 推導(dǎo)表達(dá)式:推導(dǎo)出變量數(shù)據(jù)類(lèi)型:auto被推導(dǎo)的類(lèi)型:
1auto  *a = &x;     a   被推導(dǎo)為 :int *auto 推導(dǎo)為: int
2auto  b =  &x;     b  被推導(dǎo)為: int*auto 推導(dǎo)為: int *
3auto &c = x ;     c  被推導(dǎo)為:   int&auto 推導(dǎo)為: int
4auto d = c;     d 被推導(dǎo)為:  intauto 推導(dǎo)為: int
5const auto e= x;     e 被推導(dǎo)為: const intauto 推導(dǎo)為:    int
6auto f = e;     f 被推導(dǎo)為: intauto 推導(dǎo)為:    int
7const auto& g = x;     g 被推導(dǎo)為: const int&auto 推導(dǎo)為:    int
8auto& h = g;      h 被推導(dǎo)為:const int&auto 推導(dǎo)為:    int

注意: auto聲明的變量必須馬上初始化,因?yàn)樵诰幾g階段編譯器就將其類(lèi)型推導(dǎo)出來(lái)。

auto a;error

二.auto的使用時(shí)機(jī)

(1)用于推導(dǎo)容器的迭代器:

原本不使用類(lèi)型推導(dǎo)我們對(duì)容器的遍歷:

for(vector<int>::iterator it = vec.begin(); it! = vec.end(); it++)
{
    cout<<"vec:"<< *it <<endl;
}

使用auto自動(dòng)類(lèi)型推導(dǎo)后對(duì)容器的遍歷:

for(auto it = vec.begin(); it! = vec.end(); it++ )
{
    cout>>"vec:"<<*it<<endl;
}

是不是清爽了很多,利用auto自動(dòng)類(lèi)型推導(dǎo),就不需要寫(xiě)一堆迭代器類(lèi)型了。

(2)書(shū)寫(xiě)泛性函數(shù)

不知道程序使用時(shí),傳入的參數(shù)是什么類(lèi)型時(shí),用auto可以為我們節(jié)省不少工作量。

(3)用于函數(shù)的返回值類(lèi)型后置:和decltypr配合使用。

關(guān)于“C++ auto自動(dòng)類(lèi)型推導(dǎo)規(guī)則是什么及怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI