在阅读书籍《C++ primer》时,有一个有趣的语句:
int *&r = p;
这个语句表达的含义是什么?
首先,我们知道,在C++11中新增了右值引用。即
int &b=a;
这就是引用b绑定对象a,此时就相当于b是a的别名。
接下来,分析这个语句。要理解r的类型到底是什么,
最简单的方法是从右向左阅读r的定义。离变量名最近的符号对变量的类型有最直接的影响。
这句话极为重要,应当熟记。
那么,对于语句
int *&r = p;
当我们从右往左阅读时,就应该是:先读到&r,表明r引用p,然后*&r,表明r引用的是一个指针。
实际上,这段代码完整的形式是:
int *p;
int *&r=p;
所以最后,r引用的是一个int型指针变量p;
//*************************************************************************************************************************
总结:
当读到一个复杂的指针或者引用声明时,从右向左阅读有助于弄清楚它的真实含义。