C++零基础——auto与decltype区别

by LauCyun Jun 18,2015 00:26:22 5,383 views

1、auto

关键字 auto 是修饰未知变量的类型,编译器会通过此变量的初始化自动推导变量的类型。如果初始值是常量、变量,如:

auto a = 0; //编译器会通过“0”值,推导出变量a是int

double b = 10.123;
auto c = b; //编译器会通过c指向的对象b,推导出c是double

如果初始值是引用,如:

int a = 10;
int &ra(a);
auto b = ra;  //编译器通过ra指向的对象a,推导出b的类型是int

结论:auto 是无法区分常量、变量,变量、引用。

2、decltype

关键字 decltype 能够推导表达式或者函数的返回类型,但不对表达式求值。
如果变量是函数返回类型,那么 decltype 修饰的变量也是函数返回类型。如:

decltype(fun()) sum = x;  //编译器自动推导出sum的类型是fun返回值类型

如果变量是引用,那么 decltype 修饰的变量也是引用。如:

int i = 10;
int & ri(i);
decltype(i)  a = 10;  //a的类型是int
decltype(10) b = i;   //b的类型是int
decltype(ri) c = ri;  //c的类型是int &
decltype(ri) d;       //error C2530: “d”: 必须初始化引用

当表达式不是变量,而是可作为左值的对象时,那么 decltype 返回的时指向该对象类型的应用。

int i = 10;
int *p = &i;  
decltype(*p) pri = i; //pri的类型是int &
decltype(p) pi = &i;  //pri的类型是int *

结论:decltype 可以获取常量属性,获取引用属性 。


Tags