decltype是C++11中引入的新的类型说明符。编译器根据分析表达式或者函数返回值来分析其类型,但是需要注意的是,在分析类型的过程中,不执行函数或者表达式。
1 分析表达式类型
1.1 非常量表达式的情况
int i = 0;
decltype(i++) j = i;
此时,j的类型是int,并且i和j的值都是0。
1.2 常量表达式的情况
当表达式是常量表达式时,decltype会返回表达式类型的常量。
const int ci = 1;
decltype(ci) cj = ci;
此时cj的类型是const int,再对cj进行赋值则会报错。
2 分析函数返回值类型
int i = 0;
int func()
{
i++;
return i;
}
decltype(func()) j = i;
此时,j的类型是int,并且i和j的值都是0。