在c ++中引入引用背后的基本原理是什么?

yas*_*ser 1 c++ reference rationale

从我最近的问题中发生的讨论(为什么c ++引用被认为比指针更安全?),它在我的脑海中提出了另一个问题:在c ++中引入引用的理由究竟是什么?

Gre*_*ill 12

Stroustrup的C++设计和演变的 3.7节描述了对该语言的引用的介绍.如果您对C++的任何功能背后的基本原理感兴趣,我强烈推荐这本书.

引用的引用主要是为了支持运算符重载.Doug McIlroy回忆说,一旦我向他解释当前运营商重载方案的前身问题.他使用了带有令人吃惊的效果的参考词,我嘟"着"谢谢你",并在第二天离开他的办公室,目前的计划基本完成.道格让我想起了Algol68.

C按值传递每个函数参数,并且按值传递对象的效率低或不合适,用户可以传递指针.在使用运算符重载的情况下,此策略不起作用.在这种情况下,符号方便是必不可少的,因为如果对象很大,则不能期望用户插入地址运算符.例如:

a = b - c;
Run Code Online (Sandbox Code Playgroud)

是可接受的(即常规的)符号,但是

a = &b - &c;
Run Code Online (Sandbox Code Playgroud)

不是.无论如何,&b - &c在C中已经有了意义,我不想改变它.

初始化后无法更改引用引用的内容.也就是说,一旦初始化C++引用,就无法重新绑定它.我过去曾被Algol68引用所咬,其中r1 = r2可以分配给所引用r1的对象,也可以根据类型赋予r1(重新绑定r1)新的引用值r2.我想避免在C++中出现这样的问题.

  • 我添加了相关的引用,希望你不介意. (2认同)