#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字節,上張圖片網路上搜尋的,跟你說的情況不太一樣,不過足以說明狀況了
第一個問題參考樓上。
第二個問題請看這裡:http://www.mycode.net.cn/language/ccplusplus/1489.html