C++中sizeof的一些疑惑
string s;
cout << sizeof(s) << endl;
输出是28
然后就去查sizeof
参考链接:https://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
发现很多不知道的东西。之前只知道用sizeof求类型的大小
int num = 0;
cout << sizeof(num = 10) ;
cout << num << endl;
输出是4,0;而不是预想的4,10
引用的:由于sizeof不能被编译成机器码,所以sizeof作用范围内,也就是()里面的内容也不能被编译,而是被替换成类型。=操作符返回左操作数的类型,所以num=10相当于int
结论:sizeof是一个特殊的编译预处理。
struct Node
{
char ch;
double d;
};
cout << sizeof(Node) << endl;
//这里的输出居然是16
输出居然是16而不是9
这里涉及到的位域,对齐啥的我理解的就是,按照最大的类型来分隔,就相当于是用盒子装东西,盒子的规格找最大的。在例中,最大的是8字节,相当于用8字节的盒子来装,即使char是一字节,也是用8字节的盒子来装。用了两个盒子,因此是一共是16
为了证明我的想法,在结构体中加入一个int n;
struct Node
{
char ch;
int n;
double d;
};
输出依然是16,而不是15