有没有人知道为什么选择&符号作为表示C ++引用的方式?
AFAIK(虽然我没有附近的书),Stroustroup没有解释这个选择,我觉得有点奇怪,因为相同的符号已用于C中的地址。
Stroustrup总是非常不愿意引入新的保留符号或名称,因此他可能会使用它来避免使该function对C的用户看起来很奇怪。
除了我一般同意的Earwicker的回应。 我还推测,因为&是“地址”运算符,它有点合适。 由于引用在很多方面就像是通过地址而不是通过值传递。
除此之外,获取变量的地址通常被称为“引用”
(是的,我知道引用不必使用引擎下的指针来实现,我指的是它们在概念上的工作方式)。
这只是猜测。
谁知道为什么Stroustrup会做任何事情,但我的猜测是因为参考参数的实现涉及传递左值的地址,Stroustrup选择了C address-of运算符,因为它可以让C程序员对成本模型有正确的认识。
这是我的理论。 我认为它与运算符对符号有效(语法)有很大关系。 考虑
int a[1]; // a[1] is valid (syntactically) int *a; // *a is valid int a(char, bool); // a(, ) is valid (function call) int C::*a; // .*a is valid
从概念上讲,在那些声明中,使用类型( C
, char
, bool
)命名的内容稍后将替换为该类型的表达式。 当然,目的是尽可能多地重用现有语言。 所以我认为他用&
:
int &a; // &a is valid
重要的一点是&
只对引用表示的表达式有效:对于lvalues
。 引用是左值(命名变量也是),仅适用于它们并且可以应用:
int &g(); // &g() is valid (taking the address of the referred to integer) int g(); // &g() is *not* valid (can't apply to temporary int)
我的想法是指针中使用了2个符号:*和&。 因为int *表示指向int的指针,可能Stroustrup不想引入一个全新的符号。 由于引用有点像指针,他坚持使用&。 另外,之前唯一有效的使用是取得某些东西的地址,因此可以在声明中使用。
需要了解更多c/c++开发分享为什么选择&符号作为C ++中引用的符号?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享为什么选择&符号作为C ++中引用的符号?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979673.html