类型指示符decltype
2023年12月14日 2023年12月31日
-
获取表达式类型: 定义变量时用作变量类型
1decltype(expr);
-
得到左值引用类型: 用来绑定给定类型对象
1decltype((lvalue));
获取表达式类型
变量表达式的表达式类型为变量类型
类成员也是变量
1decltype(variable);
示例
1int a = 5, &r = a; 2decltype(a) b; // 变量类型为int 3decltype(r) r2 = b; // 变量类型为int &
函数表达式的表达式类型为函数返回类型
1decltype(expr);
函数返回类型非引用: 表达式值类别为纯右值
1#include <iostream> 2int fcn(int a) { return ++a; } 3int main() 4{ 5 decltype(fcn(3)) b = 6; // 函数表达式类型为int 6 return 0; 7}
函数返回类型为右值引用: 表达式值类别为速亡值
1string &&fcn(string s); 2 3int main() 4{ 5 decltype(fcn("hello")) s = "world"; // 函数表达式类型为右值引用 6 return 0; 7}
得到左值引用类型: 绑定给定类型对象
使用圆括号将一个左值括起来
1decltype((lvalue));
示例
1int a = 5; 2decltype((a)) b = a; // a为左值, 得到左值引用,基本类型为int 3 4double d = 3.14; 5double &rd = d; 6decltype((++rd)) rd2 = d; // 前置递增运算符返回左值, 得到左值引用,基本类型为double