decltype关键字
跟auto一样,也是用来实现类型推导,但是auto只能根据变量的初始化表达式来推导,即必须初始化。
decltype也是在编译时推导,不会实际计算表达式的值,类似于一元运算符sizeof
推导规则:
1、如果对decltype使用的表达式是一个不加括号的变量,或者是一个类成员变量访问表达式,则推导出的类型为表达式一致,且保留CV限定与引用
如:
跟auto一样,也是用来实现类型推导,但是auto只能根据变量的初始化表达式来推导,即必须初始化。
decltype也是在编译时推导,不会实际计算表达式的值,类似于一元运算符sizeof
如:
decltype (func()) sum = x; //sum的类型为函数func的返回值的类型,这里并不调用函数func
推导规则:
1、如果对decltype使用的表达式是一个不加括号的变量,或者是一个类成员变量访问表达式,则推导出的类型为表达式一致,且保留CV限定与引用
如:
volatile const int& x = 0;
decltype (x) a ; //a -> const volatile int& 同时,由于没有对引用进行初始化,此句错误
int *p = &x;
decltype (p)* pp = &p; //pp -> int **
class Foo
{
public:
static const int NUmber = 0;
int x;
}
decltype (Foo::NUmber) c = 0; //c -> const int
Foo foo;
decltype (foo.x) d = 0; //d -> int
in