25

据此,没有类型后缀整数文字总是ints。但是,gcc 和 clang 都将0xffffffff(或任何显式设置符号位而不是使用 的文字-)解释为无符号。哪个是对的?(据此编译器是)

4

1 回答 1

25

根据 C++11 标准的第 2.14.2/2 段,

整数文字的类型是表 6 中可以表示其值的相应列表中的第一个。

表 6 报告对于十六进制常量,类型应为:

  • int; 或(如果不合适)
  • unsigned int; 或(如果不合适)
  • long int; 或(如果不合适)
  • unsigned long int; 或(如果不合适)
  • long long int; 或者
  • unsigned long long int.

假设您的实现有 32 位int,因为0xffffffff不适合int,它的类型应该是unsigned int. 对于 64 位的实现int,类型为int.

请注意,如果您编写了与十进制常量相同的文字,则类型只能是:

  • int; 或(如果不合适)
  • long int; 或(如果不合适)
  • long long int.
于 2013-04-01T13:25:27.150 回答