int x=0;
int* p=&x;
int& r=x; //r代表x。现在r,x都是0
int x2=5;
r=x2; //r不能重新代表其他变量。现在r,x都是5
int& r2=r; //现在r2是5(r2代表r,也相当于代表x)
注意:
sizeof(r)==sizeof(x);
&x==&r;
reference常见用途:参数的传递上面。
reference是一个对语言用户更友好的指针。
void func1(Cls* pobj) { pobj->xxx(); }
void func2(Cls obj) { obj.xxx(); }
void func3(Cls& obj) { obj.xxx(); }
...第二个与第三个被调用端算法相同,很好
Cls obj;
func1(&obj); //接口不同
func2(obj);
func3(obj);
reference通常不用于声明变量,而用于参数类型和返回类型的描述。
以下被视为“same signature"(所以二者不能同时存在):
double imag(const double& im) {...}
double imag(const double im) {...} //存在二义性
其中const也被算成签名(signature)的一部分,const可以作为函数重载的标签。