引用实际上可以占用内存吗?

时间:2017-06-27 15:57:03

标签: c++ pointers reference

阅读此answer后,我不确定引用是否确实占用了内存。我得到它在编译器用引用的变量替换引用时不占用内存,比如用引用的变量交换引用。

然而,

  

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

并且因为指针确实占用了内存,所以现在不会引用占用内存,因为编译器使它成为指针?在编译器选择将引用作为指针而不是仅仅交换指针的情况下,是否有效地说引用实际上占用内存但是以一种轻微的隐式方式?

实际上,编译器什么时候选择将引用实现为指针而不是交换,或者编译器与编译器有什么不同?

1 个答案:

答案 0 :(得分:1)

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

const socket = io.connect("https://subgroup.domain.com/server")

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

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

class A{
public:
  A(int &refval):m_ref(refval){};
private:
  int &m_ref;
}

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