C++引用这个类型占多少字节,究竟是指针大小还是所指内存空间大小,求解惑 15
#include<iostream>usingnamespacestd;structTeacher{chart=1;char&a=t;char&b=t;};intmain...
#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这样的常量型的指针,那大小前两个就又不对了,求大大解惑,感激不尽! 展开
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这样的常量型的指针,那大小前两个就又不对了,求大大解惑,感激不尽! 展开
1个回答
展开全部
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |