1 C 11 auto關鍵字及用法

2022-05-08 14:30:08 字數 2437 閱讀 9899

auto 可以自動推理資料型別。

使用語法如下:

#include#include

using

namespace

std;

intmain()

;

//auto c;

//定義乙個auto的系列的變數必須始終推倒成同一型別

auto x1, x2;

//auto a, b;

//如果初始化表示式是引用或const,則去除引用或const語義

int&q;

auto m ;

cout

<<"

type of m:

"<< typeid(m).name() int m = 400

; cout

<< "

q :

"<< q << "

m :

"<< m

int n;

auto t ;

cout

<<"

type of t:

"<< typeid(t).name() int t = 300

; cout

<<"

t :

"<< t

char ch1, &ch2;

auto&ch3;

cout

<<"

type of ch3:

"<< typeid(ch3).name() char&

ch3 = 'b'

; cout

<<"

ch1 :

"<"

ch2 :

"<"

ch3:

"const

double h ;

auto&k ;

cout

<< "

type of k:

"const double

//k = 12.0;

//如果初始化為陣列,auto自動推倒為指標

int arr[3];

auto p ;

cout

<<"

type of p:

"int*

cout<<"

size of arr:

"

<<"

size of p:

"

auto&px;

cout

<<"

type of px:

"a3_i

cout<<"

size of px:

"

return0;

}

注:auto不能用來定義陣列或函式形參。

第一種經典場景:當變數的資料型別很複雜或者寫起來很麻煩,我們懶得打字了,其實是為了加快程式設計效率。

listc;

list

::iterator ite;

ite =find(c.begin(), c.end(), target);

//代替為下面

listc;

auto ite = find(c.begin(), c.end(), target);

第二種經典場景: 當我們有時不確定函式返回值型別時, 或者說用auto來推理函式返回值型別。

templateauto func(t a, t b)

intmain()

(1)不能作為函式引數使用。因為只有在函式呼叫的時候才會給函式引數傳遞實參,auto 要求必須要給修飾的變數賦值,因此二者矛盾。

int func(auto a, auto b)    //

error

(2)不能用於類的非靜態成員變數的初始化

class

test

(3)不能使用 auto 關鍵字定義陣列

int

func()

; //

定義陣列

auto t1 = array; //

ok, t1被推導為 int* 型別

auto t2 = array; //

error, auto無法定義陣列

auto t3 = ;; //

error, auto無法定義陣列

}

(4)無法使用 auto 推導出模板引數

template struct

test{}

intfunc()

C 11特性 auto關鍵字

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

C 11特性 auto關鍵字

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

C 11新特性 auto關鍵字

熟悉指令碼語言的人都知道,很多指令碼語言都引入了 型別自動推斷 技術 比如python,可以直接宣告變數,在執行時進行型別檢查。隨著c 11標準的發布,c 語言也引入了型別自動推斷的功能,這就是我們今天要介紹的auto關鍵字。c 是一種強型別語言,宣告變數時必須明確指出其型別。但是,在實踐中,優勢我...