C++ 我是否可以保证sizeof(type)==sizeof(unsigned type)?

C++ 我是否可以保证sizeof(type)==sizeof(unsigned type)?,c++,c,sizeof,language-lawyer,standards-compliance,C++,C,Sizeof,Language Lawyer,Standards Compliance,字符的大小,int,long double。。。不同的编译器可能会有所不同。但是,根据C++11或C11标准,我是否可以保证任何有符号和无符号基本整数类型的大小是相同的?C++11标准提到了整数类型: (§3.9.1/3)对于每种标准有符号整数类型,都存在相应的(但不同的)标准无符号整数类型:“无符号字符”、“无符号短整数”、“无符号整数”、“无符号长整数”和“无符号长整数”,每种类型占用相同的存储量,并且与相应的有符号整数类型具有相同的对齐要求(3.11);也就是说,每个有符号整数类型与其对应

字符的大小,int,long double。。。不同的编译器可能会有所不同。但是,根据C++11或C11标准,我是否可以保证任何有符号和无符号基本整数类型的大小是相同的?

C++11标准提到了整数类型:

(§3.9.1/3)对于每种标准有符号整数类型,都存在相应的(但不同的)标准无符号整数类型:“无符号字符”、“无符号短整数”、“无符号整数”、“无符号长整数”和“无符号长整数”,每种类型占用相同的存储量,并且与相应的有符号整数类型具有相同的对齐要求(3.11);也就是说,每个有符号整数类型与其对应的无符号整数类型具有相同的对象表示形式。同样,对于每个扩展有符号整数类型,都存在一个相应的扩展无符号整数类型,该类型具有相同的存储量和对齐要求。[……]

所以答案是肯定的

对于C11,这里有一个对应的语句(来自N1570):

(§6.2.5/6)对于每种有符号整数类型,都有一个对应的(但不同的)无符号整数 整数类型(用关键字unsigned指定),使用相同数量的 存储(包括标志信息),并具有相同的对齐要求[…]


是的,有一个充分的保证,sizeof(有符号类型)等于sizeof(无符号类型),因为无符号类型只占用有符号类型的负数空间来增加其范围。

我希望如此,除非有某种类型的不等式是有意义的,在这种情况下,我很高兴听到它。作为旁白,字符大小始终为1。char可以有一个不寻常的大小,比如16位,但是char的sizeof仍然是1,32位类型的sizeof将是2。标准指令中没有任何内容要求
UINT_MAX>INT_MAX
;符号大小机器可以使它们相等。