auto和decltype(c++11)

时间:2021-06-24 06:06:12

1.auto

1)auto是一个类型说明符(类型说明符就是像int、double这样的),用来定义一个变量,它可以让编译器去分析表达式的类型,并使用该表达式的值去初始化变量  

//auto定义的变量必须有初始值
int v1 = , v2 = ;
auto item = v1 + v2;//编译器根据v1和v2相加的结果推断item的类型,并完成对item的初始化

2.dectype

1)dectype也是一个类型说明符,但它只让编译器去分析表达式的类型,并不用该表达式的值去初始化变量

int cj = ;
decltype(cj) x = ;
decltype(cj) y;

2)当decltype的右边是一个计算表达式,如果它的结果是左值,则将得到的是一个引用,如:解引用符*、函数调用运算符()

int i = ;
int* p = &i;
decltype(*p) c;//错误!!!解引用符返回左值,所以c是int&,必须初始化
decltype((i)) d;//错误!!!函数调用运算符返回左值,所以d是int&,必须初始化

3)decltype还可以作用于某个函数时,返回的是函数类型

int add(int a, int b)
{
return a + b;
} int jian(int a, int b)
{
return a - b;
} int main()
{
function<decltype(add)> f1=jian;
cout << f1(,) << endl; //输出:7 return ;
}