前言
std::decltype主要用于推导输入表达式的类型,注意该推导过程在编译期完成,并不会真正对表达式求值。
推导规则如下:
- 如果输入为标识符表达式或类成员表达式,则推导类型即为标识符或类成员的类型
- 如果输入为类型为T的其他形式表达式:
- 如果表达式的值为左值,则推导结果为 T&
- 如果表达式的值为纯右值,则推导结果为 T
- 如果表达式的值为将亡值,则推导结果为 T&&
- 如果输入的变量类型包含在括号内,则认为类型为左值,结果为T&
标识符表达式与类成员表达式
class A
{
public:
char mem = 0;
void func(char) {
}
static void staticFunc(int) {
}
};
A a;
int x = 0;
const int y = 0;
volatile const int z = 0;
int & xx = x;
int && xxx = 0;
decltype(x) x1; // int
decltype(y) y1 = 0