char是唯一一个有规定大小的类型吗?

5

在C++标准中:

sizeof(char)sizeof(signed char)sizeof(unsigned char)都是1

  1. C++中是否存在其他具有固定sizeof的类型?

  2. 空结构体是否符合该定义?


1
char 的固定大小是因为它是任何系统上最小的可寻址单元。而且,没有其他类型有这个要求。是的,空结构需要有一个大小(否则它们将无法寻址),因此它们的大小至少为 1。 - Some programmer dude
3个回答

10
  1. 正如您所说,标准定义了 sizeof(signed char)sizeof(unsigned char)sizeof(char) 都是 1。需要注意的是,char 必须是 signed 或者 unsigned,但它总是被视为一个独立的类型。任何其他类型的 sizeof 都取决于实现,但要遵守一些约束条件(例如,sizeof(long) 不能少于 sizeof(int))。

  2. C++ 标准要求一个空类的 sizeof 必须是大于零的整数值(否则指针算术运算将会出现严重问题)。


那么空结构体可能具有不同的大小大于零,这取决于机器架构? - amirassov
1
@МирасАмир 当然可以。 - Bathsheba
@Quentin:是的,你说得对。为了确认我已经开始衰老,几周前我回答了一个关于这个问题的问题,所以应该知道得更清楚。谢谢。 - Bathsheba
1
嘿,对于一只猫来说,这还不错 :) - Quentin
1
也许为了完整回答,你应该谈论一下类型uint8_t、uint16_t、uint32_t和uint64_t(以及它们的有符号等效类型),这些类型在各种实现中都需要具有固定的大小... - LoPiTaL

1

1)C++中还有其他固定大小的类型吗?

有指定大小的数组:

sizeof(T[N]) == N * sizeof(T)

所以sizeof(char[42])42

2)空结构体是否符合此定义?

空结构体既不是char,也不是signed charunsigned char,因此它不符合这个定义。(顺便提一下,它的sizeof不能为0)。


-1

关于问题1,你也可以在stdint.h中找到类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接