首頁 > 軟體

C++ auto自動型別推導規則和使用詳解

2022-08-17 22:02:01

一.auto推導規則4點

(1) 參照不是型別,因此auto不能推斷出參照

int a = 1;
int& b = a;// b-> int&  用->表示推匯出型別,下同
auto c = b;// c->int  

(2)auto 在推斷參照的型別時,會直接將參照替換為參照指向的物件。

參照不是物件,任何參照的地方都可以直接替換為參照指向的物件。

int a = 10;
const int& b = a ;// b-> const int&
auto c = b;  //  c-> int 
//相當於 auto c = a; 

由於在傳遞值時,修改這個值不會對原有的資料造成影響,而傳遞參照時,修改這個值會對修改原有的資料。

(3)auto 關鍵字推斷型別時,如果沒有參照符號,那麼會忽略值型別的const修飾,而保留修飾指向物件的const

const int i =1;
auto j = i;//j-> int
int a ;
const int* const pi = &a;//第一個const 修飾指標的指向的物件,第二個const修飾pi指向的值。
                         //會忽略第二個const。
auto pi2 = pi;  // pi2 -> int* const 

(4)如果有參照符號,那麼值型別的const和指向的const都會保留。

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

具體推導例子:

int x = 10;

 推導表示式:推匯出變數資料型別:auto被推導的型別:
1auto  *a = &x;     a   被推導為 :int *auto 推導為: int
2auto  b =  &x;     b  被推導為: int*auto 推導為: int *
3auto &c = x ;     c  被推導為:   int&auto 推導為: int
4auto d = c;     d 被推導為:  intauto 推導為: int
5const auto e= x;     e 被推導為: const intauto 推導為:    int
6auto f = e;     f 被推導為: intauto 推導為:    int
7const auto& g = x;     g 被推導為: const int&auto 推導為:    int
8auto& h = g;      h 被推導為:const int&auto 推導為:    int

注意: auto宣告的變數必須馬上初始化,因為在編譯階段編譯器就將其型別推匯出來。

auto a;error

二.auto的使用時機

(1)用於推導容器的迭代器:

原本不使用型別推導我們對容器的遍歷:

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

使用auto自動型別推導後對容器的遍歷:

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

是不是清爽了很多,利用auto自動型別推導,就不需要寫一堆迭代器型別了。

(2)書寫泛性函數

不知道程式使用時,傳入的引數是什麼型別時,用auto可以為我們節省不少工作量。

(3)用於函數的返回值型別後置:

和decltypr配合使用,在後文講述。

到此這篇關於C++ auto自動型別推導規則和使用詳解的文章就介紹到這了,更多相關C++自動型別推導內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com