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中auto和decltype

    C++11中auto和decltype auto和decltype都是C++11中引进来用于自动推断类型的关键字,...

  • C++11之decltype

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

  • decltype关键字

    C++11新标准学习:decltype关键字 1. decltype的意义 有时我们希望从表达式的类型推断出要定义...

  • C++11的类型推导详解

    auto & decltype 关于C++11新特性,最先提到的肯定是类型推导,C++11引入了auto和decl...

  • C++11拾穗

    C++11新关键字 alignas:指定对齐大小 alignof:获取对齐大小 decltype auto(重新定...

  • 模板函数返回类型的演进

    提纲 c++03: trick 方法 c++11: auto->decltype 组合 c++14: 自动推导模板...

  • C++雾中风景10:聊聊左值,纯右值与将亡值

    C++11的版本在类型系统上下了很大的功夫,添加了诸如auto,decltype,move等新的关键词来简化代码的...

  • C++11类型推导

    C++11 重新定义了auto 和 decltype 这两个关键字实现了类型推导,让编译器来操心变量的类型。 au...

  • C++11关键字decltype

    在C++泛型编程中,经常会使用到模板,但是模板在使用时,可能会出现不知道应该声明是什么类型的状况 在上叙情况中,我...

  • 【c++11关键字】decltype

网友评论

    本文标题:C++11之decltype

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