decltype类型指示符

本文深入解析C++中decltype关键字的用法,详细说明了当表达式为变量时,decltype返回其类型,包括引用类型的特殊处理;当表达式不是变量时,返回表达式计算结果的类型。通过实例展示了不同类型情况下decltype的行为差异。

decltype(exp)

1.使用的表达式exp是一个变量

exp是一个变量的时候,返回的是变量本身的类型(尤其注意引用类型)

例如:

const int ci = 0, &cj = ci;

decltype(ci) x = 0; //x是const int类型

decltype(cj) y = x; //y是const int& 类型,绑定到x上,引用类型必须初始化

decltype(cj) z; //这是错误的写法,因为z是const int&类型,是引用类型,必须初始化

2.使用放表达式不是一个变量

使用的表达式不是一个变量的时候返回的是表达式计算结果的类型

例如:

int i = 42, *p = &i, &r = i;

decltype(r + 0) b; //注意这里,虽然r是一个引用类型(绑定了i), 但是这里使用的是r绑定的对象,这里表达式的结果是int类型,所以返回的也是int类型,而不是引用类型

decltype(*p) c; //这里的错误的,注意*p不是一个变量,p才是变量,*p的计算结果是引用,引用必须初始化,解引用操作返回的结果就是引用

 

特别注意的一点是,引用类型只有在作为单个变量在decltype中使用的时候才是使用它本身,其余所有情况都是使用它绑定的对象

转载于:https://www.cnblogs.com/max88888888/p/10126870.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值