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