yas*_*ser 1 c++ reference rationale
从我最近的问题中发生的讨论(为什么c ++引用被认为比指针更安全?),它在我的脑海中提出了另一个问题:在c ++中引入引用的理由究竟是什么?
Gre*_*ill 12
Stroustrup的C++设计和演变的 3.7节描述了对该语言的引用的介绍.如果您对C++的任何功能背后的基本原理感兴趣,我强烈推荐这本书.
引用的引用主要是为了支持运算符重载.Doug McIlroy回忆说,一旦我向他解释当前运营商重载方案的前身问题.他使用了带有令人吃惊的效果的参考词,我嘟"着"谢谢你",并在第二天离开他的办公室,目前的计划基本完成.道格让我想起了Algol68.
C按值传递每个函数参数,并且按值传递对象的效率低或不合适,用户可以传递指针.在使用运算符重载的情况下,此策略不起作用.在这种情况下,符号方便是必不可少的,因为如果对象很大,则不能期望用户插入地址运算符.例如:
Run Code Online (Sandbox Code Playgroud)a = b - c;是可接受的(即常规的)符号,但是
Run Code Online (Sandbox Code Playgroud)a = &b - &c;不是.无论如何,
&b - &c在C中已经有了意义,我不想改变它.初始化后无法更改引用引用的内容.也就是说,一旦初始化C++引用,就无法重新绑定它.我过去曾被Algol68引用所咬,其中
r1 = r2可以分配给所引用r1的对象,也可以根据类型赋予r1(重新绑定r1)新的引用值r2.我想避免在C++中出现这样的问题.