2016-04-18 14 views
1

The CPPReference page on std::setbase言う:小数出力と接頭依存性入力に対応std :: setbase(2)がバイナリ出力に切り替わるのはなぜですか?

8以外の塩基の値、10、またはゼロにbaseFieldの16リセット、。

どうしてですか?

これらのベースのみがサポートされる特別な理由はありますか?どんな種類の困難な選択もせずに、少なくとも16まで(実際には、36:0-9、そしてa-z)までサポートすることは些細なことです。具体的には、2は人気のあるベースです、私はstd::setbase(2)(と対応するstd::binary)に興味があると思います。

私は明らかに自分のビットを印刷できますが、私のostreamがそれを行うのは良いことでした。

+1

バイナリを印刷するうまい方法は、http://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt2です。 – Cubbi

+0

@Cubbi:これはいいですが、ストリームに気付くためにコードを印刷する必要がありますバイナリで印刷する必要があります。 _stream_をバイナリに変換します。 – einpoklum

答えて

1

唯一の確かな答えは、「標準がそう言っているから」です。

標準では、多くの場合、フィーチャパリティがprintfに達するように設計された、おそらくは小数点、8進数および16進数の一般的な構文)。

また、基本設定が別の「現在のベース」フィールドではなくビットフィールドになっているので、iostream APIを「多くの」ベースをサポートするようにパッチするのは簡単ではありません。

標準では、std::bitsetのビットマスクタイプにする必要があります。そのため、これらの新しい「ベース」フィールドを何らかの方法でシャベルする方法が見つかるかもしれませんが、 (加えて、fmtflagsが整数型のコードを壊す危険性があります)、ほとんど誰も気にしない機能ですか?

これは、最初の設計が悪い(実際にはiostreamの残りの部分と同様)、重要ではない修正であり、このような機能に対する実際のユーザー要求はありません。

関連する問題