C++ 参考只是语法糖,还是在某些情况下提供任何加速?
例如,无论如何,指针调用都涉及副本,对于引用调用似乎也是如此。基本机制似乎是相同的。
编辑:在大约六个答案和许多评论之后。我仍然认为引用只是语法糖。人们是否可以直接回答“是”或“否”,以及是否有人可以做出可接受的答案?
假设引用作为指针:
- 不能为 NULL
- 一旦初始化,就不能重新指向其他对象
-
任何使用它的尝试都会隐式取消引用它:
int a = 5;
int &ra = a;
int *pa = &a;
ra = 6;
(*pa) = 6;
这是反汇编时的样子:
int a = 5;
00ED534E mov dword ptr [a],5
int &ra = a;
00ED5355 lea eax,[a]
00ED5358 mov dword ptr [ra],eax
int *pa = &a;
00ED535B lea eax,[a]
00ED535E mov dword ptr [pa],eax
ra = 6;
00ED5361 mov eax,dword ptr [ra]
00ED5364 mov dword ptr [eax],6
(*pa) = 6;
00ED536A mov eax,dword ptr [pa]
00ED536D mov dword ptr [eax],6
从编译器的角度来看,分配给引用与分配给取消引用的指针是同一件事。正如您所看到的,它们之间没有区别(我们现在不讨论编译器优化)
然而,如上所述,引用不能为空,并且对它们包含的内容有更强的保证。
对于我来说,只要不需要,我更喜欢使用参考文献nullptr
作为有效值,应重新指向的值或要传递的不同类型的值(例如指向接口类型的指针)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)