C++引用这个类型占多少字节,究竟是指针大小还是所指内存空间大小,求解惑

#include <iostream>
using namespace std;

struct Teacher
{
char t = 1;
char &a = t;
char &b = t;
};
int main()
{

int a = 10;
int &t = a;

printf("%d %d %d", sizeof(int &), sizeof(char &), sizeof(struct Teacher));
getchar();
return 0;
}
上面代码得到的结果是 4 ,1, 12,假设sizeof(char &)求得的是对应空间的大小,前两个解释的通,那这样与结构体中char &矛盾,实际运行过程中查看内存时,发现结构体中存放的是成员t的地址,这样说来12又说得通,但这样两者就矛盾了。引用类型究竟是一种什么类型?有资料说可以看作是int *const p这样的常量型的指针,那大小前两个就又不对了,求大大解惑,感激不尽!

     sizeof操作符应用在引用类型上的时候,返回的是包含被引用对象所需的内存长度(即被引用对象的大小)。所以前面2个分别为4和1。

    结构体的sizeof并不是简单的sizeof各个数据成员再相加。涉及到字节对齐和填充字节。struct Teacher其中char t占1个字节。而char &a和char &b被解析成char *const pa和char *const pb这样的,分别占4个字节。所以char t填充3个字节。整个结构体12个字节。

参考这篇博客:http://www.blogjava.net/majianan/archive/2006/08/20/64664.html

温馨提示:答案为网友推荐,仅供参考
相似回答