Decltye 随笔


类似于sizeof操作符,decltype也不需对其操作数求值。粗略来说,decltype(e)返回类型前,进行了如下推导:

1.若表达式e指向一个局部变量、命名空间作用域变量、静态成员变量或函数参数,
    那么返回类型即为该变量(或参数)的“声明类型”;
2.若e是一个左值(lvalue,即“可寻址值”),则decltype(e)将返回T&,其中T为e的类型;
3.若e是一个x值(xvalue),则返回值为T&&;
4.若e是一个纯右值(prvalue),则返回值为T。

const int i=0 ;     ///decltype(i) is const int

bool func(const Widget & w)//widget is a class
///decltype(w) is const Widget &
///decltype(func) is bool * (const Widget&)

struct Point{
  int x,y;
};
///decltype(Point::x ) is int

Widget x; ///decltype(w) is Widget

if(func(w)) ; ///decltype( func(w) )  is bool

vector<int> v;
if( v[0] == 0 ); /// ***decltype(v[0]) is int& ***

 

上一篇:C++ 中 auto 与 decltype 的用法与区别


下一篇:C++ 知识整理 函数