auto:当想将一个表达式赋给变量时,如果不知道这个表达式的类型时,就可以使用auto去定义这个变量。
int val1 = 1, val2 = 2;
auto item = val1 + val2; // item类型为int
decltype:当想从表达式的类型推断出要定义的变量的类型,但是不想使用这个表达式的值时,就可以使用decltype去获取表达式的数据类型。
const int ci = 0, &cj = ci;
decltype(ci) x = 0; // x的类型为const int
decltype(cj) y = x; // y的类型为const int&, y必须初始化,此时绑定到x上
注意:
int i = 0;
decltype((i)) c; // 当多了一层括号时,此时c类型变为int&,且必须被初始化
decltype(i) d; // d的类型为int