一般的课本上讲到引用时,都是说“引用是工具的一个体名”。 我认为这种界说是不清晰的,倒霉于初学者领略引用。至少我本身曾经被这个定 义困扰了一段时间。到底什么是“别名”?
实际上,引用的实质是位于xxxxxx地点上的一个xxxx范例的工具。好比教科 书上常用的例子:
int a = 5; //不妨假设编译器将a分派到0x400000
int &b = a;
这内里b的精确意义就是,放在0x400000地点上的一个int范例工具。这内里 包罗了两重寄义,首先b是一个int范例工具,因此他的利用完全与int范例工具 一样。别的这个int范例工具的地点是0x400000,因此从底层来看,它具有指针 的一些特性,无论你奈何通报,他都代表放在0x400000的谁人int.
在c++中,引用全部是const范例,界说之后不行变动。实际上“引用 ”对方针代码来说是不存在的,因为对付编译器来说,利用上例中的b就是 利用0x400000地点的谁人int.引用一经界说,就不会指向此外地点,也不会指向 此外范例,因此编译器不会专门开发空间存储这个引用,而是将发送引用的处所 替换为真正的地点,吸收引用的处所则替换为接管指针。
在java中,数据工具也都是引用范例,可是这里的引用与C++有很大差异,他 们不是const范例,可以指向一个空值,也可以随时变动其指向的内存地点。这 实际上与C++中的指针观念完全对应。java中的引用实际上对应C++中的指针而非 引用,只不外是省去了C++中指针的取地点(&)与取值(*)操纵。