自動型別推導

2022-06-07 04:48:07 字數 2020 閱讀 4550

c++03及之前的標準種,auto放在變數宣告之前,宣告變數為自動變數(還有一種為靜態變數 static變數)的儲存策略。但是這個關鍵字常省略不寫。c++11中,auto關鍵字放在變數之前,作用是在宣告變數的時候根據變數初始值的型別自動為此變數選擇匹配的型別。

注意點

auto a1 = 10;  //正確

auto b1; //錯誤,編譯器無法推導b1的型別

b1 = 10;

auto a4 = 10, a5;   //正確

auto b4, b5 = 20.0; //錯誤,沒有推導為同一型別

int a; int& b =a;

auto c = b; //c的型別為int而非int&(去除引用)

const int a1;

auto b1 = a1; //b1的型別為int而非const int(去除const)

int a = 10; int& b =a;

auto& d = b;//此時d的型別才為int&

const int a2 = 10;

auto& b2 = a2;//因為auto帶上&,故不去除const,b2型別為const in

int a3[3] = ;

auto b3 =a3;

cout << typeid(b3).name() << endl; //輸出int * (輸出與編譯器有關)

int a7[3] = ;

auto& b7 =a7;

cout << typeid(b7).name() << endl; //輸出int [3] (輸出與編譯器有關)

(1)當我們非常希望能夠在變數定義的時候,希望明確地指出變數的型別,而且不希望隨便更改其型別,那麼我們可以使用下面的方法

auto x = int; // 初始化列表

auto y = int;// 編譯器報錯,初始化列表不能窄化

auto z = int(3.0); // c風格的強制型別轉換,z的值是整數3

(2)auto和初始化列表一起用時,要避免在一行中使用直接列表初始化和拷貝列表初始化

auto x, y = ;  // 錯誤,不要同時使用直接和拷貝列表初始化
classic c++ style

(經典c++風格)

modern c++ style

(現代c++風格)

int x = 42;

auto x = 42;

float x = 42.;

auto x =42.f;          //f代表float

unsigned long x = 42;

auto x = 42ul;        //ul代表unsigned long

std::string x = "42";

auto x = "42"s;      //c++14

chrono::nanoseconds x;

auto x = 42ns;       //c++14

int f(double);

auto f (double) -> int;    或   auto f (double) ;     或

auto f = (double) ;  //匿名函式

在編譯時期推導乙個表示式的型別,而不用初始化,其語法格式有點像sizeof()。

#include using namespacestd;

int fun1()

auto fun2() // c++14

intmain()

c 型別識別和型別自動推導

c 是一門靜態編譯語言,不支援動態型別的獲取,但在實際情況中,經常會遇到資料型別的判斷。什麼是型別識別?其實就是rtti,執行時型別識別,也就是得到資料的實際定義型別。那麼在c 中簡單的獲取型別有幾種方法 在 c 程式設計思想 第8章 執行時型別識別 中提到了三種基本方法 1 手動控制 多型機制 即...

C 11 14 自動型別推導 auto

從c 11起,auto關鍵字不再表示儲存型別,而是成為了隱式型別定義關鍵字,其作用是讓編譯器在編譯期 便自動推斷出變數的型別。例如 auto a 1 a 為 int 型變數 auto ptr new auto 1 auto 1 int 1 ptr 為 int 型指標變數 const auto q a...

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 ...