c++中的static问题
本文介绍了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++中的static问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文