C++11特性——decltype类型指示符

    对于使用过部分C++11特性的朋友,应该已经知道了C++11后auto与以前不同了,可以进行自动类型推断,但这自动类型推断是需要进行初始化或者赋值的。这样说,有时候或许我们需要的只是那个表达式的类型,但不需要那个表达式的值,那用auto岂不是多了一步不必要的工作了?由此,我们就能引出今天的主题了——decltype类型指示符。

    正如上面所说,decltype仅仅只是获取表达式的类型,但不会去计算其值,举个例子来说明其使用方法:

int val1 = 100;                      //定义一个int型变量
decltype(val) val2;                  //获取val1的类型,并定义val2

如此,我们定义的val2的类型就是val1的类型。如果decltype使用的表达式并不是一个变量,则decltype得到的类型则为那个表达式的值的类型。

    通过上面的描述,我们都知道了decltype可以进行类型推断,那它只能推断基本类型么?当然不是!decltype还可以对复合类型进行推断,比如指针,引用等。下面我们再看一个例子:

int val = 100;
int *p_val = &val;
int &r_val = val;
decltype(r_val + 1) a;       //正确,r_val + 1为一个int型常量
                                             //decltype 得到一个int类型
decltype(*p_val) b;           //错误,*p_val是解引用操作
                                             //按约定,decltype得到的应该
                                             //是一个int &类型,b是引用应该被初始化

还有一种情况需要说明,对于decltype括号中的表达式,加括号和不加括号将可能是两种不同的结果,如:

decltype((val)) a;               //错误,decltype得到int &类型
decltype(val) b;                  //正确,decltype得到int类型

    对于decltype大致的内容大概就是这些,使用时应该特别注意返回的类型是否为引用类型,切记:双层括号的decltype得到的必为引用类型!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值