c 11 auto 型別說明符詳解

2021-09-29 13:40:43 字數 2121 閱讀 2175

當使用 auto 自動推斷型別時,需要注意以下幾點:

一、必須要有初始值

乙個顯而易見的道理,auto 表示編譯器根據初始值型別推斷宣告變數的型別,因此必須要有初始值。

二、一條宣告語句只能有一種基本型別

auto i = 0, *p = &i; // 正確,基本型別是int

auto sz = 0, pi = 3.14; // 錯誤,由sz推斷基本型別是int,但pi是double

需要特別注意,第一條語句的*是從屬於p的,表示p是指標,與基本型別無關,基本型別是int。

三、auto 一般會忽略初始值的頂層const屬性

所謂頂層const和底層const,是為了研究指標而引入的說法。頂層const屬性是指標自身具有const屬性;而底層const屬性則是指標特有的,指的是指標指向物件具有的const屬性。

一般來說,討論指標以外的物件時,const屬性都是指頂層const。引用型別比較特殊,因為引用本身不是物件,而是另乙個物件的別名,因此討論引用的const屬性時一定指的是底層const。

auto i = 0;

const int ci = i, &cr = ci; // cr是ci的別名

auto b = ci; b++; // b是int,ci的頂層const屬性被忽略

auto c = cr; c++; // c是int,cr(即ci)的頂層const屬性被忽略

auto d = &i; (*d)++; // int *

auto e = &ci; // 對常量物件取位址是底層const,所以e是指向常量的指標const int *

const auto f = ci; // 明確指出f具有頂層const

四、auto 宣告引用會保留初始值的頂層const屬性

auto i = 0;		

const int ci = i, &cr = ci; // cr是ci的別名

auto &g = ci; // auto引用保留初始值ci的頂層const屬性,不能通過g修改ci的值

五、auto 宣告不能引用字面值,除非明確指明

auto i = 0;		

const int ci = i, &cr = ci; // cr是ci的別名

//auto &h = 42; // 錯誤,根據42推斷出基本型別是int,int引用不能繫結到int常量上

const auto &j = 42; // 明確指出j是常量引用

六、 & * 不屬於基本型別,而是宣告符的一部分

auto i = 0;		

const int ci = i, &cr = ci; // cr是ci的別名

auto k = ci, &l = i; // auto推斷基本型別是 int

auto &m = ci, *p = &ci; // m是對常量的引用,p是指向常量的指標

七、引用即別名時刻記住這條真理,遇到類似下面的情況就不會犯迷糊!

int a[10]{};

auto b = a; // b是 int*

auto &c = a; // c是int[10]&

auto型別說明符

c 11新標準引入了auto型別說明符 用它能讓編譯器替我們分析表示式所屬的型別 auto讓編譯器通過初始值來推算出標量的型別。顯然auto定義的變數必須有初始值 auto item vall val2 item的型別通過val2和val1的相加的結果得出 使用auto也能在一條語句中宣告多個變數 ...

auto型別說明符

程式設計時,需要把表示式的值賦給變數,這就要求在宣告變數時清楚知道表示式的型別。為了解決這個問題,c 11引入auto型別說明符,用它就能讓編譯器替我們去分析表示式所屬的型別。auto讓編譯器通過初值來推算變數的型別。因此,auto定義的變數必須有初始值。auto能在一句中定義多個變數,但是這幾個變...

C 11 auto自動型別推導

1.auto型別推導auto x 5 正確,x是int型別 auto pi new auto 1 正確,批是int const auto v x,u 6 正確,v是const int 型別,u是const int static auto y 0.0 正確,y是double型別 auto int r ...