1.auto
1)auto是一个类型说明符(类型说明符就是像int、double这样的),用来定义一个变量,它可以让编译器去分析表达式的类型,并使用该表达式的值去初始化变量
//auto定义的变量必须有初始值 int v1 = 1, v2 = 2; auto item = v1 + v2;//编译器根据v1和v2相加的结果推断item的类型,并完成对item的初始化
2.dectype
1)dectype也是一个类型说明符,但它只让编译器去分析表达式的类型,并不用该表达式的值去初始化变量
int cj = 0; decltype(cj) x = 1; decltype(cj) y;
2)当decltype的右边是一个计算表达式,如果它的结果是左值,则将得到的是一个引用,如:解引用符*、函数调用运算符()
int i = 0; 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(10,3) << endl; //输出:7 return 0; }