引用实际上会占用内存吗?

5 c++ pointers reference

读完这个答案后,我不太确定引用是否确实占用内存。我发现当编译器用引用的变量替换引用时,它不会占用内存,就像用引用的变量交换引用一样。

然而,

在一般情况下,编译器通常将引用实现为指针。但他们通常有更多关于参考可能指向的信息,并将其用于优化。

由于指针确实占用内存,那么由于编译器将其设置为指针,该引用现在不会导致占用内存吗?在编译器选择使引用成为指针而不是仅仅交换它的情况下,可以说引用实际上确实占用了内存,但以一种稍微隐式的方式?

事实上,编译器什么时候选择将引用实现为指针而不是交换,或者编译器之间的情况不同?

Hea*_*avy 2

如果引用是类的成员,肯定会占用一些空间。例如:

class A{
public:
  A(int &refval):m_ref(refval){};
private:
  int &m_ref;
}
Run Code Online (Sandbox Code Playgroud)

编译器只会将此变量视为常量指针。

但是,如果您将其用作作用域内的临时变量,则它没有理由使用内存:

void func(int &a){
  int &a_ref = a;
}
Run Code Online (Sandbox Code Playgroud)

编译器只会用实际变量替换引用。