auto所修饰的变量必须初始化,编译器需要通过初始化来确定auto所代表的类型,即必须要定义变量。若仅希望得到类型,而不需要定义变量,怎么办?
C++11新增了decltype关键字,用来在编译时推导出一个表达式的类型
语法:decltype(exp),exp表示一个表达式
1.表达式推导
int main()
{
int x = 10;
decltype(x) y = 1; //y=int
decltype(x + y) z = 10; //z=int
double dx = 10;
decltype(x + dx) c; //c =double
return 0;
}
int main()
{
const int& x = 10; //x const int &
decltype(x) j = 6; //j const int &
}
int main()
{
int z = 10;
const decltype(z)* p = &z;//p const int *
decltype(z)* ip = &z;// ip int *
return 0;
}
2.函数表达式推导
int my_add(int a, int b)
{
return a + b;
}
int main()
{
decltype(my_add(0, 0)) z;//只推导函数的返回值类型,不会调用函数
z = my_add(12, 23);
auto x = my_add(12, 23);//只推导函数的返回值类型,不会调用函数
}