【发布时间】:2013-04-10 07:54:45
【问题描述】:
从我目前阅读的内容来看,似乎引用变量根本不应该占用任何内存。相反,它们被视为它们引用的完全相同的变量,但名称不同。
但是,当我运行以下代码时,似乎并非总是如此:
#include <cstdio>
struct A
{
int m[3];
};
struct B: A
{
B():x(m[0]), y(m[1]), z(m[2]){}
int& x;
int& y;
int& z;
};
int main(){
printf("%u, %u\n", sizeof(A), sizeof(B));
return 0;
}
输出:
12, 40
为什么 B 比 A 大这么多?
有没有其他方法可以访问,例如 B.m[0] 和 B.x?
【问题讨论】:
-
你读错了。谜团已揭开。 ;-)
-
stackoverflow.com/questions/1179937/… 我从那里读到它,以及其他来源。
-
@Hassedev 这与函数堆栈上的引用有关,作为成员的引用是不同的野兽
-
比那个答案的作者措辞有点粗心,你还没有仔细阅读。默认情况下,任何引用将都需要内存。但在某些情况下可能会被优化掉。
-
Aaaand... 现在我再次阅读它,我注意到它们可能以多种不同的方式实现。好吧,另一个问题仍然有效:)
标签: c++