C++ decltype((i))为什么是个引用?
阿神
阿神 2017-04-17 11:25:03
0
3
587
int i = 42;
decltype((i)) d;    //error: d is int& and must be initialized
decltype(i) e;      //ok: e is an (uninitialized) int

下面是引自 《C++ primer 5th edition》的一段话:在2.5 Dealing with types的“decltype and reference” 这一小节里面

If we wrap the variable’s name in one or more sets of parentheses, the compiler will evaluate the operand as an expression. A variable is an expression that can be the left-hand side of an assignment. As a result, decltype on such an expression yields a reference

不能理解为什么 left-hand side of an assignment 会使得decltype最后yield一个引用。

求解释,万分感谢!

阿神
阿神

闭关修行中......

全部回覆(3)
左手右手慢动作

先把最外面的 decltype() 給抹掉:

  • decltype((i)) -> (i)
  • decltype(i) -> i

也就是說,第一個decltype是對應(i),第二個處理i

在C++表達式中,第一個是"lvalue表達式";第二個是"一個變數"。
因為是lvalue,因此decltype會理解為引用。

刘奇

書中稍早一點有這樣一句話:

As we'll see in § 4.1.1 (p. 135), some expressions will cause decltype to yield a reference type. Generally speaking, decltype returns a reference type for expressions type. Generally speaking, decltype returns a reference type for expressions that yield objects that the stects that yield that that yield-that that yield-that that yield that that yield-that that yield that that a hand side of the assignment

所以decltype作用在左值上會回傳引用型別

黄舟

因為(i)的型別就是個引用啊。
decltype(var)就是這個變數的型別;decltype(expr)就是這個表達式的型別。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板