decltype 遇到计算结果为左值的表达式会得到引用类型

本文深入探讨C++11中decltype的使用方法及其特性,包括如何准确推断变量及表达式的类型,以及处理数组和左值引用的特殊情况。通过具体示例,帮助读者理解decltype在复杂场景下的应用。

c++11支持用decltype推断变量/表达式的类型,与auto推断不同,decltype并不会计算表达式的值。

decltype会准确的返回变量/表达式的类型,即使是数组这种比较复杂的类型也不例外。

int A[10]{};
decltype(A) B{}; // A和B类型完全相同

在这里插入图片描述
唯一的例外是,如果括号内是一个表达式(不是变量),且计算结果是左值(可以放在等号左侧),那么返回的类型是表达式结果的引用类型,举两个例子说明。

例子一

int i = 1, *p = &i;
// *p是左值,所以ref是i的引用
decltype(*p) ref = i;

在这里插入图片描述
例子二

int n = 123;
decltype(n) i1 = 2;
// (n) 被当成表达式,所以i2是n的引用
decltype((n)) i2 = n;

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值