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

inti=42;
decltype((i))d;//error:disint&andmustbeinitialized
decltype(i)e;//ok:eisan(uninitialized)int
下面是引自《C++primer5thedition》的一段话:在2.5Dealingwithtypes的“decltypeandreference”这一小节里面
Ifwewrapthevariable’snameinoneormoresetsofparentheses,thecompilerwillevaluatetheoperandasanexpression.Avariableisanexpressionthatcanbetheleft-handsideofanassignment.Asaresult,decltypeonsuchanexpressionyieldsareference
不能理解为什么left-handsideofanassignment会使得decltype最后yield一个引用。
求解释,万分感谢!
PIPIONE
浏览 853回答 2
2回答

qq_遁去的一_1

首先把最外面的decltype()给抹掉:decltype((i))->(i)decltype(i)->i也就是说,第一个decltype是对应(i),第二个处理i。在C++表达式中,第一个是"lvalue表达式";第二个是"一个变量"。因为是lvalue,因此decltype会理解为引用。

桃花长相依

书中稍早一点有这样一句话:Aswe’llseein§4.1.1(p.135),someexpressionswillcausedecltypetoyieldareferencetype.Generallyspeaking,decltypereturnsareferencetypeforexpressionsthatyieldobjectsthatcanstandontheleft-handsideoftheassignment所以decltype作用在左值上会返回引用类型
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript