当我们把一个对象用作右值时,用的是对象的值(内容);而当我们把一个对象用作左值时,用的是对象的内存地址(身份)。
一个简单的判别方法就是取变量的地址,如果能取地址&就是左值,否则是右值。
**Tips:** 临时变量是右值。取地址符作用于一个左值对象,返回一个指向该对象的指针,这个指针是一个右值。解引用生成左值。
int *p ;
decltype(p);--->int *
decltype(*p);--->解引用运算符生成左值,所以结果是int &
decltype(&p);---->取地址运算符生成右值,所以结果是int **,也就是一个指向整型指针的指针