在需要右值的地方可以用左值来代替,但是不能把右值当成左值使用。
如果表达式的求值结果是左值, decltype 作用于该表达式得到一个引用类型。
int *p;
decltype(*p) 的结果是 int & // *p 是左值
decltype(&p) 的结果是 int ** // &p 是右值
有 4 种运算符明确规定了运算对象的求值顺序:
&&
、 ||
、 ?:
、 ,
。
拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。
如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象。