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一个引用。
求解释,万分感谢!
先把最外面的 decltype() 給抹掉:
decltype((i))
->(i)
decltype(i)
->i
也就是說,第一個
decltype
是對應(i)
,第二個處理i
。在C++表達式中,第一個是"lvalue表達式";第二個是"一個變數"。
因為是
lvalue
,因此decltype
會理解為引用。書中稍早一點有這樣一句話:
所以decltype作用在左值上會回傳引用型別
因為
(i)
的型別就是個引用啊。decltype(var)
就是這個變數的型別;decltype(expr)
就是這個表達式的型別。