1. 引用假象
之前知道引用是用指针实现的, 但是没想到它的大小和地址竟然是和本地一样的!
这都是编译器造成的假象
看代码:
int main(int argc, char *argv[]){
int x = 0;
int* p = &x; //
int& r = x; //r 代表x, 现在r, x都是0
cout << "sizeof(p) = " << sizeof(p) << endl; //8, 因为我系统是64位的, 所以指针的大小是8个字节
cout << "sizeof(x) = " << sizeof(x) << endl; //4
cout << "sizeof(r) = " << sizeof(r) << endl; //4 , 编译器造成的假象
cout << "&x = " << &x << endl;
cout << "&r = " << &r << endl;
return 0;
}
输出是:
sizeof(p) = 8
sizeof(x) = 4
sizeof(r) = 4 # 大小也是一样的
&x = 0x7ffe903b63d4
&r = 0x7ffe903b63d4 # 地址是一样的
又一个例子:
2. reference的常见用途
引用和非引用视作函数的同一签名, 原因是:
如果视作同一签名的话, 那么调用double b = 0; imag(b); 的时候, 编译器就不知道调用哪个函数了
在类中的函数, 如果函数是const的, 那么可以视为重载, 也即签名不同.
eg.
double imag(const double& im) const {...}
double imag(const double im) {...}
各位可以测试一下…