引用存储在堆还是栈上?

12

我想知道这段代码中的引用变量(例如c)是否:

int a = 5;
int & c = a;

内存分配可以来自堆或栈。有人能帮忙吗?谢谢。


1
引用不是对象。 - Kerrek SB
这个回答解决了所有问题 C++引用在内存方面是什么样子的? - Prasad Rane
4个回答

18

引用仅是别名,至于它是否需要实际存储未被C++11标准指定。

根据C++11标准第8.3.2/4段:

是否需要引用存储空间(3.7)未经指定。


1
所以,你的意思是答案不确定? - user2110714
1
@YasinRazlık:我更愿意说答案是不相关的。在大多数情况下,我认为根本不会分配任何存储空间:引用只是一个别名,不是保存内存地址(如指针)的变量。 - Andy Prowl
2
@YasinRazlık 无所谓的答案。 - juanchopanza

4

引用只是别名,不必在特定位置分配。标准没有指定这种细节,甚至不要求引用具有任何存储。


3

无论如何,引用只是一个自动取消引用指针的常量,没有指针算术运算和空或不确定值的选项。

关于重新制定的问题 - 引用的使用方式暗示它们将主要被堆栈分配。在所有非静态场景中,它们的存储都不能被省略。而这就是C++,一种高性能的编程语言,它省略了任何未被使用的东西。


0

大多数编译器将引用视为受限制的指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接