char!=(signed char), char!=(unsigned char)
这个问题探讨了 char 数据类型的行为C 与 int 等其他整数类型相比。具体来说,它解决了以下问题:char 被视为与有符号 char 和无符号 char 不同的类型。
C 标准将 char、signed char 和 unsigned char 定义为三种不同的类型。虽然它们共享相同数量的存储和对齐要求,但它们的值表示和位模式是不同的。对于无符号字符类型,所有位模式都表示数字。但是,对于 char 或signed char 来说不一定如此。
问题中的示例代码演示了这种行为差异。当为 int8(有符号字符)、uint8(无符号字符)和 char 创建模板专门化时,会生成三个单独的实例化。这是因为编译器将 char 视为与其他两种不同的类型。
相反,当为 int、int32 和 uint32 创建模板特化时,只会为 int 和 int32 生成一个实例化,因为它们是视为同一类型。然而,Signed int 被视为单独的类型并生成自己的模板特化。
此行为与 C 标准一致,其中规定 char、signed char 和 unsigned char 是三种不同的类型。因此,在模板专业化中将它们视为不同的类型是正确的。
以上是为什么在 C 模板中 char 被视为与有符号字符和无符号字符不同的类型?的详细内容。更多信息请关注PHP中文网其他相关文章!