据此,没有类型后缀的整数文字总是int
s。但是,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 回答