decltype是根据表达式的实际类型推演出定义变量时所用的类型
auto和decltype的区别
auto类型用编译器计算变量的初始值来推断其类型,
decltype虽然也让编译器分析表达式并得到它的类型,但是不实际计算表达式的值。
推演表达式类型作为变量的定义类型
int main()
{int a = 10;int b = 20;// 用decltype推演a+b的实际类型,作为定义c的类型decltype(a+b) c;cout<<typeid(c).name()<<endl;return 0;
}
推演函数返回值的类型
void* GetMemory(size_t size)
{return malloc(size);
}
int main()
{ // 如果没有带参数,推导 函数的类型cout << typeid(decltype(GetMemory)).name() << endl;// 如果带参数列表,推导的是函数返回值的类型, 注意:此处只是推演,不会执行函数cout << typeid(decltype(GetMemory(0))).name() << endl;decltype(GetMemory(0)) a;cout << typeid(a).name() << endl;return 0;
}
传参后,decltype不会去去执行函数,直接去判断的函数的返回类型