【发布时间】:2011-12-07 23:38:41
【问题描述】:
这个问题源于我正在讨论使用 C++ 中的数字类型通常使用 ostream & operator << (ostream &, some_type) 输出数值的正确方法。
我熟悉的 std::showbase 和 std::showpos 在每个基中的行为方式,它们基本上是互斥的。即:十进制不显示底数,正数加“+”;而在十六进制或八进制中,显示基数,但不显示“+”(也不是减号),因为类型的值被打印出来,就好像它被强制转换为无符号类型一样。
例如,这个简单(冗长)的程序:
#include <iostream>
int main() {
std::cout << std::dec << std::showpos << std::showbase << int64_t(+5) << std::endl;
std::cout << std::oct << std::showpos << std::showbase << int64_t(+5) << std::endl;
std::cout << std::hex << std::showpos << std::showbase << int64_t(+5) << std::endl;
std::cout << std::dec << std::showpos << std::showbase << int64_t(-5) << std::endl;
std::cout << std::oct << std::showpos << std::showbase << int64_t(-5) << std::endl;
std::cout << std::hex << std::showpos << std::showbase << int64_t(-5) << std::endl;
}
使用 GCC 编译时给出此输出:
+5
05
0x5
-5
01777777777777777777773
0xfffffffffffffffb
这是我一直期望的,我使用 C++ 很多年了,但这真的是标准保证的,还是这只是常见的行为?例如,符合标准的 C++ 编译器是否可以输出这些序列之一?
+5
+05
+0x5
-5
01777777777777777777773
0xfffffffffffffffb
甚至:
+5
+05
+0x5
-5
-05
-0x5
【问题讨论】: