在C++标准中:
sizeof(char)
、sizeof(signed char)
和sizeof(unsigned char)
都是1
。
C++中是否存在其他具有固定
sizeof
的类型?空结构体是否符合该定义?
正如您所说,标准定义了 sizeof(signed char)
、sizeof(unsigned char)
和 sizeof(char)
都是 1。需要注意的是,char
必须是 signed
或者 unsigned
,但它总是被视为一个独立的类型。任何其他类型的 sizeof
都取决于实现,但要遵守一些约束条件(例如,sizeof(long)
不能少于 sizeof(int)
)。
C++ 标准要求一个空类的 sizeof
必须是大于零的整数值(否则指针算术运算将会出现严重问题)。
1)C++中还有其他固定大小的类型吗?
有指定大小的数组:
sizeof(T[N]) == N * sizeof(T)
所以sizeof(char[42])
是42
。
2)空结构体是否符合此定义?
空结构体既不是char
,也不是signed char
或unsigned char
,因此它不符合这个定义。(顺便提一下,它的sizeof
不能为0
)。
关于问题1,你也可以在stdint.h
中找到类型。
char
的固定大小是因为它是任何系统上最小的可寻址单元。而且,没有其他类型有这个要求。是的,空结构需要有一个大小(否则它们将无法寻址),因此它们的大小至少为 1。 - Some programmer dude