首页 > 编程笔记

C++ decltype关键字的用法

decltype 关键字是 C++11 标准新增的关键字,功能与 auto 关键字类似,也是在编译时期进行类型推导,但 decltype 的用法与 auto 不同。

decltype 关键字的使用格式如下所示:

decltype(表达式)

在上述格式中,decltype 关键字会根据表达式的结果推导出数据类型,但它并不会真正计算出表达式的值。

需要注意的是,decltype关键字的参数表达式不能是具体的数据类型。

decltype 关键字的用法示例代码如下所示:
int a;
int b;
float f;
cout << typeid(decltype(a+b)).name() << endl;   //推导结果:int
cout << typeid(decltype(a+f)).name() << endl;   //推导结果:float
cout << typeid(decltype(int)).name() << endl;   //错误,不能通过编译

在程序设计中,可以使用 decltype 关键字推导出的类型定义新变量,示例代码如下所示:
int a;
int b;
float f;
decltype(a + b) x;   //定义int类型变量x
decltype(a + f) y;   //定义float类型变量y
decltype 关键字最为强大的功能是在泛型编程中,与 auto 关键字结合使用推导函数返回值类型。

auto 作为函数返回值占位符,->decltype() 放在函数后面用于推导函数返回值类型。示例代码如下所示:
template<class T1, class T2>
auto multiply(T1 x, T2 y)->decltype(x * y)
{
}
在泛型编程中,这种方式称为追踪返回类型,也称尾推导。

有了->decltype(),程序设计者在编写代码时就无须关心任何时段的类型选择,编译器会进行合理的推导。

优秀文章