1 指针常量的一个实例
#include using namespace std;void main(){int j=3;int var=4;int* p = &var;int* const pf = &var;*pf=8;int i = 5;cout<
2 上述指针常量写成引用的形式
#include using namespace std;void main(){int j=3;int var=4;int* p = &var;int& f = var;f=8;int i = 5;cout<
3 引用的本质是一个指针常量
从以上两个实例可以看出,引用是占用一个指针的内存空间的,但其引用本身的地址被编译器隐藏了,& f是其指向的变量的地址,而f由编译器实现的自动解引用,f自动解引用为其指向的变量的数据值。所以, 引用的本质是一个指针常量,一个由编译器实现了自动解引用的指针常量。
查看上面两个实例对应的汇编代码,发现其完全一致:
凡是使用了引用变量的代码,都可以转换成使用指针常量对应形式的代码,只不过书写形式上要烦琐一些。反过来,由于对引用变量使用方式上的限制,所以使用指针常量实现的功能不一定能够用引用来实现。
函数返回一个引用可以用作左值:
#include using namespace std;int& g2(void){ static int a = 10; a++; printf("a:%d