1.decltype
作用于变量直接得到变量的类型;②作用于表达式,结果是左值的表达式得到类型的引用,结果是右值的表达式得到类型;③作用于函数名会得到函数类型,不会自动转换成指针。
a. decltype(val) 会返回val的类型
const int a = 10;
decltype(a) b = 19;
b. decltype(expr)
int i = 42, *p = &i, &r = i;
// r + 0是一个表达式
// 算术表达式返回右值
// b是一个int类型
decltype(r + 0) b;
// c是一个int &
decltype(*p) c = i;
c. decltype(函数名)
// 声明了一个函数类型
using FuncType = int(int &, int);
// 下面的函数就是上面的类型
int add_to(int &des, int ori);
// 声明了一个FuncType类型的指针
// 并使用函数add_to初始化
FuncType *pf = add_to;
int a = 4;
// 通过函数指针调用add_to
pf(a, 2);
2.右值引用
int main()
{
int i = 42;
int& a = i; //a引用左值i
int a1 = i;
const int& a2 = 45; //可以将const引用绑定到右值45上
int&& rr1 = 10; //右值引用10
cout << rr1 << endl;//10
cout << a2 << endl;//45
}