为了账号安全,请及时绑定邮箱和手机立即绑定

C++ decltype((i))为什么是个引用?

C++ decltype((i))为什么是个引用?

PIPIONE 2019-03-29 22:08:44
inti=42;decltype((i))d;//error:disint&andmustbeinitializeddecltype(i)e;//ok:eisan(uninitialized)int下面是引自《C++primer5thedition》的一段话:在2.5Dealingwithtypes的“decltypeandreference”这一小节里面Ifwewrapthevariable’snameinoneormoresetsofparentheses,thecompilerwillevaluatetheoperandasanexpression.Avariableisanexpressionthatcanbetheleft-handsideofanassignment.Asaresult,decltypeonsuchanexpressionyieldsareference不能理解为什么left-handsideofanassignment会使得decltype最后yield一个引用。求解释,万分感谢!
查看完整描述

2 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

首先把最外面的decltype()给抹掉:
decltype((i))->(i)
decltype(i)->i
也就是说,第一个decltype是对应(i),第二个处理i。
在C++表达式中,第一个是"lvalue表达式";第二个是"一个变量"。
因为是lvalue,因此decltype会理解为引用。
                            
查看完整回答
反对 回复 2019-03-29
?
桃花长相依

TA贡献1860条经验 获得超8个赞

书中稍早一点有这样一句话:
Aswe’llseein§4.1.1(p.135),someexpressionswillcausedecltypetoyieldareferencetype.Generallyspeaking,decltypereturnsareferencetypeforexpressionsthatyieldobjectsthatcanstandontheleft-handsideoftheassignment
所以decltype作用在左值上会返回引用类型
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 852 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信