ostream & operator << (ostream &, some_type)
这个问题源于我正在讨论使用C++ 中数字类型的常用方法输出数值的正确方法。
我熟悉每个基础中 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