decltype 关键字

decltype 是C++11引入的一个关键字,用于获取表达式的数据类型。它主要用于在编译时期获取表达式的类型,而不进行实际的计算。decltype 的语法如下:

decltype(expression) 

其中,expression 是一个要获取类型的表达式。

下面是一些示例说明 decltype 的用法:

  1. 基本用法

    int x = 42; decltype(x) y = 10; // y的类型为int,因为x的类型是int 
  2. 表达式类型获取

    int a = 5; double b = 3.14; decltype(a + b) c; // c的类型为double,因为a + b的类型是double 

  3. 引用类型获取:

    int x = 42; decltype(x)& y = x; // y的类型为int&,因为decltype(x)是int,加上引用符号&表示引用 

  4. 函数返回类型获取

    int func(); decltype(func()) result; // result的类型为函数func的返回类型 

  5. 模板中的应用

    template  
    auto add(T t, U u) -> decltype(t + u) 
    { return t + u; } 

    这里 decltype(t + u) 用于确定函数的返回类型,它将是 tu 相加的类型。

  6. 在lambda的应用

       decltype 关键字在 lambda 表达式中通常用于指定 lambda 函数的返回类型或者获取 lambda 表达式中某个表达式的类型。这对于泛型编程和一些复杂的情况非常有用。
下面是一些在 lambda 表达式中使用 decltype 的示例:


指定返回类型

auto add = [](int x, double y) -> decltype(x + y) {
    return x + y;
};


在这个例子中,decltype(x + y) 用于指定 lambda 函数的返回类型,它将是 x 和 y 相加的类型。


使用泛型参数

template 
auto multiply = [](T t, U u) -> decltype(t * u) {
    return t * u;
};


在这个例子中,decltype(t * u) 用于确定 lambda 函数的返回类型,它将是 t 和 u 相乘的类型。这使得 lambda 表达式能够处理各种类型的输入。


获取表达式类型

int x = 42;
auto lambda = [x]() -> decltype(x) {
    return x;
};


这个例子中,decltype(x) 用于获取 x 的类型,然后 lambda 函数返回一个相同类型的值。


引用类型的应用

cpp
int x = 42;
auto lambda = [&x]() -> decltype(x)& {
    return x;
};


这里,decltype(x)& 用于指定 lambda 函数的返回类型为 x 的引用。
在 lambda 表达式中使用 decltype 可以帮助我们更灵活地处理不同类型的输入和输出,使得 lambda 表达式在泛型和模板编程中更为强大。
 

总体来说,decltype 提供了一种灵活的方式来处理表达式的类型,特别是在模板和泛型编程中,可以用于自动地推导表达式的类型而不依赖于硬编码。

你可能感兴趣的:(c++,STL,c++新特性,c++)