質問

この質問は、通常のものを使用して数値を出力する正しい方法について私が持っていた議論から生じました ostream & operator << (ostream &, some_type) C ++の数値タイプの場合。

私がstd :: showbaseとstd :: showposの行動に精通している方法は、基本的に相互に排他的です。つまり、10進数ではベースは表示されず、「+」が正の数に追加されます。一方、16進数またはOctalでは、ベースが表示されますが、タイプの値はまるで署名されていないタイプにキャストされているかのように印刷されるため、「+」は表示されません(マイナスでもありません)。

たとえば、このシンプルな(冗長)プログラム:

#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 ++コンパイラは、代わりにこれらのシーケンスの1つを出力できますか?

+5
+05
+0x5
-5
01777777777777777777773
0xfffffffffffffffb

あるいは:

+5
+05
+0x5
-5
-05
-0x5

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top