【发布时间】:2013-10-03 19:05:10
【问题描述】:
我知道标准如下:
- 以 0 开头的整数被解释为八进制。
- 以 0x 或 0X 开头的整数被解释为十六进制。
整数文字的类型取决于它的值和符号:
- 默认情况下,小数是有符号的,并且具有适合值的最小类型 int、long、long long。
- 十六进制和八进制可以有符号或无符号,并且具有适合文字值的最小类型 int、unsigned int、long、unsigned long、long long、unsigned long long。
- 没有 short 类型的文字,但这可以被后缀覆盖。
但是 VC++ 呢?!它似乎将十进制、八进制和十六进制视为相同,并且小数也允许使用无符号类型。
类似于以下代码:
cout << typeid(4294967295).name() << endl;
cout << typeid(4294967296).name() << endl;
cout << typeid(0xffffffff).name() << endl;
cout << typeid(0x100000000).name() << endl;
给予:
unsigned long
__int64
unsigned int
__int64
这是预期的吗?为什么它与标准不同?
【问题讨论】:
-
您认为这与标准有何不同?
-
在 C++11 中,4294967295 应该适合 long long 类型,因此它永远不能有无符号类型。但是,在 C++11 之前,unsigned long 是一个有效的结果。
-
哪个版本的 VC++,顺便说一句?
-
@GManNickG 确实取决于此,请查看 C++ 标准中的 [lex.icon]。
-
@GManNickG:实际上他是对的(参见第 2.14.2 节,表 6)。
标签: c++ visual-c++ c++11