C++11之decltype类型说明符

C++11新标准 decltype类型说明符


decltype的作用是选择并返回操作数的类型,编译器分析表达式得到它的类型,但不计算


1. 函数
decltype(func()) val=i;
decltype(func()) 编译器并不会调用该函数,而是得到该函数的返回类型

2.顶层const
decltype会保留顶层const和引用类型
const int i=10,&j=20;
decltype(i) x=0;    // x是const int 保留了顶层const
decltype(j) y=x;    // y是const int& 保留了顶层const和指针
decltype(j) z;  // 报错 引用必须初始化
这一点与auto是完全相反,auto会忽略掉变量的顶层const,而decltype会保留顶层const

3.decltype使用的结果是表达式(非单一变量)
在此之前 先说明左值和右值的概念
C语言中,左值表示的是可以放在赋值‘=’左边的表达式(右边也可以),而右值是只能放在‘=’的右边
C++中含义不同,简单来说若一个表达式的可以取地址,说明它是一个左值,若不能取地址说明是一个右值
例如r+0,3.14,*p都不能取地址,表达式结果是一个临时变量,说明它们是一个右值
当一个对象用作左值,用的是它的身份(内存中的位置),当一个对象用的是右值,用的是它的值(内容)
int i=42,*p=&i,&r=i;
decltype(r+0) b;    // 正确
decltype(*p) c;  // 报错
decltype(i) d;  // 正确
decltype((i)) e;  // 报错 
r+0是一个右值 返回运算结果的类型int
报错 *p是一个左值表达式 返回类型int& 由于未初始化所以非法
decltype(i)返回i变量的类型,而decltype((i))返回int& 因为(i)被视作表达式(非单一常量),是左值
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值