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会理解为引用。
桃花长相依
TA贡献1860条经验 获得超8个赞
书中稍早一点有这样一句话:Aswe’llseein§4.1.1(p.135),someexpressionswillcausedecltypetoyieldareferencetype.Generallyspeaking,decltypereturnsareferencetypeforexpressionsthatyieldobjectsthatcanstandontheleft-handsideoftheassignment所以decltype作用在左值上会返回引用类型
添加回答
举报
0/150
提交
取消