C auto和decltype關鍵字

2021-10-03 23:46:35 字數 1539 閱讀 3024

可以用 auto 關鍵字定義變數,編譯器會自動判斷變數的型別。例如:

auto i =

100;

// i 是 int

auto p =

newa()

;// p 是 a*

auto k =

34343ll

;// k 是 long long

有時,變數的型別名特別長,使用 auto 就會很方便。例如:

map int, greater 

>mp;

for(

auto i = mp.

begin()

; i != mp.

end();

++i)

cout << i -

> first <<

", "

<< i -

> second;

編譯器會自動判斷出 i 的型別是 map::iterator。

decltype 關鍵字可以用於求表示式的型別。例如:

int i;

double t;

struct a

;const a* a =

newa()

;decltype

(a) x1;

//x1 是 a*

decltype

(i) x2;

//x2 是 int

decltype

(a -

> x) x3;

// x3 是 double

在上面的例子中,編譯器自動將 decltype (a) 等價為a*,因為編譯器知道 a 的型別是a*。

auto 和 decltype 可以一起使用。例如:

#include

using

namespace std;

struct a };

a operator+(

int n,

const a & a)

template

<

classt1,

class

t2>

auto

add(t1 x, t2 y)

->

decltype

(x + y)

intmain()

程式的輸出結果如下:

101.5

101

第 12 行告訴編譯器,add 的返回值型別是decltype(x+y),即返回值的型別和x+y這個表示式的型別一致。編譯器將 add 例項化時,會自動推斷出x+y的型別。

在 c++11 中,函式返回值若為 auto,則需要和 decltype 配合使用。在 c++14 中,則可以不用 decltype,例如下面的程式沒有問題:

auto add (

int a,

int b)

c auto和decltype關鍵字

可以用 auto 關鍵字定義變數,編譯器會自動判斷變數的型別。例如 auto i 100 i 是 int auto p new a p 是 a auto k 34343ll k 是 long long 有時,變數的型別名特別長,使用 auto 就會很方便。例如 map mp for auto i m...

C auto和decltype型別說明符

c auto和decltype型別說明符 有時候我們定義帶初始值的變數時,不知道或難以確定表示式的型別,我們可以用auto或decltype型別說明符,讓編譯器根據表示式自動推斷變數的型別。例如,我們不知道或難以確定val1和val2的型別,或者不知道它有沒有重新定義加法,使得結果型別改變,我們可以...

auto 和 decltype的區別

auto和decltype都是型別推斷的兩種方式,但之間又有區別。主要有這幾個方面的區別 1.auto是通過編譯器計算變數的初始值來推斷型別的,decltype同樣也是通過編譯器來分析表示式進而得到它的型別,但是它不用將表示式的值計算出來。2.編譯器推斷出來的auto型別有可能和初始值型別不同,比如...