C++11之decltype

作者: Hard模式 | 来源:发表于2018-06-14 15:53 被阅读0次

    decltype是一种新的操作符,用于获取表达式的数据类型。
    使用方法和sizeof操作符类似。

    int i;
    decltype(i) x1; // 类型为int
    
    const int bar();
    decltype(bar()) x2; // 类型为int
    
    const int&& foo();
    decltype(foo()) x3; // 类型为const int&&
    
    struct A { double x; };
    const A* a = new A();
    decltype(a->x) x4; // 类型为double
    decltype( (a->x) ) x5; // 类型为const double&
    

    decltype( e ) 返回类型前,进行了如下推导:

    • 若表达式e为一个无括号的变量、函数参数、类成员访问,那么返回类型即为该变量或参数或类成员在源程序中的“声明类型”;
    • 否则的话,根据表达式的值分类(value categories),设T为e的类型:
      • 若e是一个左值(lvalue,即“可寻址值”),则返回T&;
      • 若e是一个临终值(xvalue),则返回T&&;
      • 若e是一个纯右值(prvalue),则返回T。

    上述最后一个例子中,带括号的表达式(a->x)既非“标识符表达式”,亦非类访问表达式,因而未指向一个命名对象,而是一个左值,于x5便为“指向表达式类型的引用”,亦即const double&。

    参考来源
    wiki - decltype

    相关文章

      网友评论

        本文标题:C++11之decltype

        本文链接:https://www.haomeiwen.com/subject/amjyeftx.html