条款3: 理解decltype
目录
一、decltype + 变量
二、decltype + 表达式
三、decltype 使用场景
一、decltype + 变量
🥭 所有的信息都会保留,数组和函数也不会退化
const int &&carref = std::move(ca);
decltype(carref) bb; // bb推导为const int &&,不会被忽略掉const int *const cacptr = &a;
decltype(cacptr) bb; // bb推导为const int *const,不会被忽略掉int array[2] = {0, 1};
decltype(array) bb; // bb推导为int [2],指针不会退化
二、decltype + 表达式
🍍 会返回表达式结果对应的类型,如果类型是左值:得到该类型的左值引用;如果是右值:得到该类型
🥥 decltype单独作用于对象时,如果没有使用表达式属性,获得变量类型。如果想要变量作为表达式需要+()
int *aptr = &a;
decltype(*aptr) b; // bb被推导为int &int a = 10;
decltype(a) b; // 没有表达式属性,推导为int
decltype((a)) b;