C 11 型別推導auto關鍵字

2022-03-28 09:11:38 字數 2452 閱讀 2060

在c++11中,auto關鍵字被作為型別自動型別推導關鍵字

(1)基本用法

c++98:型別 變數名 = 初值;   int i = 10;

c++11:auto 變數名 = 初值;  auto i = 3.14;

借助於auto關鍵字,可對變數進行隱式的型別定義,即由編譯器在編譯期間根據變數的初始化語句,自動推斷出該變數的型別.

auto a = 1;//

a被推導為int

auto b = new auto(2);//

b推導為int*

auto const *c = &a;//

在舊語法中,auto型變數儲存於棧區,static型變數儲存於靜態區,二者不能同時使用,但c++11的auto關鍵字已經不再作為儲存型別指示符

static auto i = 4

;auto

int j; //

error

auto並不能代表乙個世紀的型別宣告,只是乙個型別宣告的佔位符,使用auto宣告的變數必須馬上初始化,以讓編譯器推斷出它的實際型別並在編譯剪短將auto替換為真的型別

auto k; //

error

(2)auto同指標或引用結合使用

即使不把auto宣告為指標,其亦可被推導為指標型別

int a = 0

;auto *b = &a; //

auto=int b==>int*

auto c = &a //

auto=int* c==>int*

當表示式帶有引用屬性時,auto會拋棄其引用屬性

auto &d = a;  //

auto=int d==>int&

auto e = a; //

auto=int e==>int

當表示式帶有cv限定,auto會拋棄其cv限定

auto const f = a;  //

auto=int f==>int const

auto g = f; //

auto=int g==>int

但是如果auto和引用或指標結合使用,表示式的cv限定會被保留下來

auto const &h = a; //

auto=int h==>int const&

auto &i = h; //

auto=int const i==>cosnt &

auto *j = &h; //

auto=int const j==>int const*

(3)auto使用的限制

auto不能用於函式的引數

void foo(auto i)//

error 無法推導為int

foo(10);

auto不能用於類的非靜態成員變數

auto不能用於模板的型別實參(模板的型別實參都是)

dummyd1;

dummy

d2 = d1; //

error

auto不能用於陣列元素

int a[10

];auto b[10] = a;//error

auto c = a; //ok,但是c推斷為int*

auto &d = a; //ok,但是此時a代表的是陣列整體不是首位址

(4)何時使用auto

通過auto減少模板的型別引數

通過auto可以簡化某些複雜型別的書寫

#include #include 

#include

#include

using

namespace

std;

class

a

intget(void)const

void

set(int arg)

private

:

intm_var;

};class

b

char

const *get(void)const

void

set(char

const *arg)

private

:

char

const *m_var;

};//

c++98版本

templatevoid foo(x const &x)

//c++11版本

templatevoid bar(x const &x)

int main(void

)

C 11 型別推導auto

在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。使用auto會拖慢c 效率嗎?完全不會,因為在編譯階段編譯器已經幫程式設計師推導好了變數的型別。使用auto會拖累c 編譯效率嗎?完全不...

C 11特性 auto關鍵字

正文 本文的內容已經不新鮮了。關於auto,翻來覆去被人知道的都是這些東西,本文並沒有提出新穎的auto用法。本人原是痛恨部落格一篇篇都是copy而來缺乏新意的探索,當然,本文不是copy而來,但發布這樣一篇大家皆知的文章心裡甚是惶恐。本文對auto的內容加以整理,權當是自己的複習筆記了。回到頂部 ...

C 11特性 auto關鍵字

本文的內容已經不新鮮了。關於auto,翻來覆去被人知道的都是這些東西,本文並沒有提出新穎的auto用法。本人原是痛恨部落格一篇篇都是copy而來缺乏新意的探索,當然,本文不是copy而來,但發布這樣一篇大家皆知的文章心裡甚是惶恐。本文對auto的內容加以整理,權當是自己的複習筆記了。早在c 98標準...