c++中的static问题

#include <iostream>

using namespace std;

/*

struct xx

{

long long _x1;

char _x2;

int _x3;

char _x4[2];

static int _x5;

};

int xx::_x5 = 0;

*/

int main()

{

struct xx

{

long long _x1;

char _x2;

int _x3;

char _x4[2];

static int _x5;

};

int xx::_x5 = 0;

cout << sizeof(xx) << endl;

return 0;

}

请问为什么把那个含有static变量的结构体放在main函数中为什么编译时就会报错啊?
还有就是为什么用sizeof计算出这个结构体所占的大小是24字节啊?我觉得是18字节啊,有人说是需要对整个结构体按照8字节对齐。但是如果只有一个int型的变量在结构体中,比如说:

 struct node

{

int x;

};

这样计算sizeof是4啊,不是按照8字节对齐啊。。请教一下大家

回答:

第一个问题: 在function中声明的struct/class不允许有static成员(你可以想象下这个static成员的生命周期)。

第二个问题: 这个补齐的原因是发生了两次补齐,这个依赖于编译器实现。你可以把第二个char的声明放在int之前,让两个char连在一起,然后运行程序试试。这样只会产生一次补齐。

回答:

手机答

第一个问题不太清楚,好久没碰C了,明天用电脑试,猜测不是定义出了问题,而是int xx::_x5 = 0;不能放在在main函数中(或者你在定义前面加个static试试)

第二个问题,结构体按照8字节对齐是因为定义中有个long long _x1;正好8字节,上张图片
Image
网上搜的,和你说的情况不太一样,不过足以说明情况了

回答:

第一个问题参考楼上。
第二个问题请看这里:http://www.mycode.net.cn/language/ccplusplus/1489.html

以上是 c++中的static问题 的全部内容, 来源链接: utcz.com/p/191085.html

回到顶部