在阅读了这个answer之后,我不太确定引用是否真的占用了内存。我知道当编译器用引用变量替换引用时,它不会占用内存,比如用引用的变量交换引用。
然而,
在一般情况下,编译器通常将引用实现为指针。但是他们通常有更多关于引用指向什么的信息,并将其用于优化。
既然指针占用了内存,那么这个引用会不会导致占用内存,因为编译器把它变成了指针?在编译器选择将引用作为指针而不是仅仅交换它的情况下,如果说引用确实占用内存,但以一种轻微的隐式方式,是否有效呢?
实际上,编译器什么时候选择将引用实现为指针而不是交换,或者这与编译器不同?
发布于 2017-06-27 18:39:57
如果引用是类的成员,它肯定会占用一定的空间。例如:
class A{
public:
A(int &refval):m_ref(refval){};
private:
int &m_ref;
}编译器只会把这个变量当作一个常量指针。
但是,如果将其用作作用域中的临时变量,则没有理由使用内存:
void func(int &a){
int &a_ref = a;
}编译器只需用一个实际的变量替换引用。
https://stackoverflow.com/questions/44784857
复制相似问题