1
13
引用的自然实现实际上是一个指针。但是,不要在代码中依赖于这一点。 |
2
38
为了重复大家所说的一些内容,让我们来看一些编译器输出:
我们可以使用llvm(在关闭优化的情况下)编译此文件,得到以下信息:
两种功能的主体是相同的 |
3
13
很抱歉使用assembly解释这一点,但我认为这是理解编译器如何实现引用的最佳方法。
此代码的输出如下
让我们来看看反汇编(我用了gdb实现这个目的)。8、9和10这是代码的行号)
在这里
分配地址
现在,抓住了!比较9号线和10号线的拆卸情况,你会发现,
所以,引用确实占用了内存。在本例中,它是堆栈内存,因为我们已经将其分配为局部变量。 它占用了多少内存? 指针所占的空间。 现在让我们看看如何访问引用和指针。为了简单起见,我只显示了程序集片段的一部分
现在,将上面的两行进行比较,您将看到显著的相似性。
现在比较一下这个
我想你能发现这里发生了什么。
如果你要求
最后一件事,为什么这行被评论了?
因为
|
4
4
用比亚恩的话说: 就像一个指针,一个 参考 是对象的别名,通常实现为 保留机器地址 对象的,并且与指针相比不强制执行性能开销,但它与指针的区别在于: 您可以使用与对象名称完全相同的语法访问引用。 引用始终引用初始化它的对象。 没有空引用,我们可以假定引用引用引用了一个对象 虽然一 参考 事实上是 指针 但不能像 指针 但作为一个 别名 . |
5
2
指针不需要引用。 在许多情况下,它是,但在其他情况下,它只是一个别名,不需要为指针单独分配内存。 程序集示例并不总是正确的,因为它们严重依赖于优化以及编译器的“智能”程度。 例如: INTI; 国际标准化组织; 不需要生成任何附加代码或分配任何附加内存。 |
7
1
引用不是指针。这是事实。指针可以绑定到另一个对象,有自己的操作,如取消引用和递增/递减。 尽管在内部,引用可以作为指针实现。但这是一个实现细节,它不会改变引用不能与指针交换的事实。如果引用是作为指针实现的,则不能编写代码。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |