|
|
1
2
如果编译器知道referece总是引用一个特定的对象/项,那么编译器当然可以优化间接寻址。 然而,大多数引用实际上是在运行时绑定的。即使引用的某个特定实例无法恢复,对某个特定作用域的不同执行或包含引用成员的对象的不同实例也可能运行,并且这些实例的引用绑定到不同的对象。使用间接寻址是编译器处理这一问题的方便方法。 引用仅绑定到单个对象的情况可能相对较少,以至于编译器可能找不到优化——特别是在大多数情况下,优化可能不是一个显著的收益。
此外,我怀疑您没有启用编译器优化-使用代码并使用
如果您正在查看编译器的调试输出,那么它总是将引用视为幕后的指针,这并不奇怪。 |
|
|
2
2
引用只是受限制的指针。唯一的区别是它们必须指向现有的变量。你可以在C++中绕过这个问题,但是很难错过:
当然,这是未定义的行为! 所以,基本上是 实施 作为指针。它们在许多地方的用法不同,例如,当引用作为r值或l值时,会自动取消引用:
它们为原始指针提供了一种更安全的替代方法。而且,它们的语法要比原始指针优雅得多。假设在重载类运算符时没有引用。 总之,它们是受限制的指针,具有更好/更安全的别名,但功能性降低。 |
|
|
3
1
引用在内部表示为指针。它是 编译程序 这就限制了初始化和不可再密封性。
唯一的选择是复制值,这不是引用所做的。引用的作用类似于指针:它保存在对象的位置上。区别在于引用的行为与对象本身类似,而不需要显式地取消引用。 |
|
|
4
1
C++ FAQ Lite为你所看到的提供了一个很好的解释: https://isocpp.org/wiki/faq/references 本质上,简而言之,编译器本质上把它当作一个指针,它使用对象的地址,并为您进行解引用工作。 |
|
|
5
0
是的,引用只是指针的语法糖分(有适合新语法的限制)。它还允许C++通过引用参数传递副本,而与只有值拷贝(甚至指针参数)的C相反。 |
|
|
Kris · 有没有办法获得可变结构字段的“引用” 4 年前 |
|
|
Jora Karyan · IF语句未按预期引发错误 4 年前 |
|
|
nedzad · 如何访问引用Firebase中其他对象的对象 8 年前 |
|
|
Empha · 从成员函数对对象所做的更改不会持续。范围/参考问题? 8 年前 |