auto型別說明符

2021-06-22 17:08:40 字數 1376 閱讀 5871

c++11新標準引入了auto型別說明符

用它能讓編譯器替我們分析表示式所屬的型別 auto讓編譯器通過初始值來推算出標量的型別。

顯然auto定義的變數必須有初始值

auto item = vall + val2; //item的型別通過val2和val1的相加的結果得出

使用auto也能在一條語句中宣告多個變數 因為一條宣告語句只能有乙個基本資料型別 所以改語句中所有的變數的初始資料型別都必須是一樣的才可以

複合型 常量和auto

編譯器推斷出來的auto型別有時候和初始值的型別並不一樣 編譯器會適當的地改變型別使其更符合初始化的規則

(1)首先 使用引用其實是使用的引用的物件,特別是當引用被當做初始值時,真正參與初始化的其實是引用物件的值。

此時編譯器以引用物件的型別來作為auto的型別:

int i = 0,&r = i;

auto a = r;  // a是乙個整數的型別(r是i的別名,而i是乙個整數型別

(2)其次 auto一般會忽視掉頂層的const,同時頂層的const側會保留下來,比如當初始值是乙個指向常量的指標的時候

const int ci = i, &cr = ci;

auto b = ci; // b是乙個整數(ci的頂層const特性被忽略掉了)

auto c = cr; //c是乙個整數(cr是ci的別名,ci本身是乙個頂層const)

auto d = &i; // d是乙個整數指標(整數的位址就是指向整數的指標)

auto e = &ci;// e是乙個指向整數常量的指標(對常量物件取位址是一種底層const)

如果希望推斷出來的auto型別是乙個頂層的const,需要明確的指出

const auto f = ci; //ci的推算型別是int,f 是const int;

(3)可以將引用設為auto,此時原來的初始化規則任然實用

auto & g = ci; // g是乙個整數常量引用 繫結到ci

auto & h = 42; //錯誤: 不能為非常量引用繫結字面量

const auto & j = 42; //正確 可以為常量引用繫結字面量

設定乙個型別為auto的引用時 初始值中的頂層常量屬性仍然保留。

要在一條語句中定義讀個變數 切記 符號&和* 只從屬某個宣告符號 而非基本資料型別的一部分 因此初始值必須是同一種型別

auto k = ci, &l = i; //k是整數,l是整數的引用

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

auto &n = i,*p = &ci;

// n是整數型別 p是指向常量整數的指標 資料型別不一樣  乙個是int 乙個是const int 所以錯誤

auto型別說明符

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

型別說明符auto和decltype

auto和decltype都是c 11標準提出來的型別說明符,都可以通過編譯器自動推斷出表示式的型別,從而用這個型別定義新的變數,如 double v1 9.8,v2 1.3 auto v3 v1 v2 decltype v1 v2 v4 我們可以通過typeid name 來檢視變數的型別,需要加...

c 11 auto 型別說明符詳解

當使用 auto 自動推斷型別時,需要注意以下幾點 一 必須要有初始值 乙個顯而易見的道理,auto 表示編譯器根據初始值型別推斷宣告變數的型別,因此必須要有初始值。二 一條宣告語句只能有一種基本型別 auto i 0,p i 正確,基本型別是int auto sz 0,pi 3.14 錯誤,由sz...