10

to_stringC ++ 11標準のセクション21.5で宣言されているさまざまな関数に、shortおよびunsigned shortのオーバーロードがない理由を誰かが知っていますか?これらの関数が宣言されていないのはなぜnoexceptですか?これはオーバーロードの完全なセットです:

string to_string(int val);
string to_string(unsigned val);
string to_string(long val);
string to_string(unsigned long val);
string to_string(long long val);
string to_string(unsigned long long val);
string to_string(float val);
string to_string(double val);
string to_string(long double val);

これらの機能を採用するに至った提案(N1803、N1982、N2408)を検討しましたが、いずれも動機や論理的根拠がありません。

1つの投稿に2つの(むしろ関連するIMO)質問を入れてプロトコルに違反している場合は、お詫び申し上げます。私はまだSOで新しいです。

4

2 に答える 2

13

例外:のnoexceptコンストラクタがないためstd::string、それは不可能です(つまり、文字列メモリの割り当てが失敗する可能性があります)。

ショート:デフォルトでプロモートされているすべての整数型が欠落しています。彼らを支援することから得られるものは何もないと思います。対照的に、長いタイプはより高価になる可能性があるintため、スペースを意識した場合に提供する必要があります。

于 2012-08-20T21:14:59.000 に答える
4

これらの関数はすべて、渡された値に対して算術演算を実行します。intよりも小さい型は、算術演算のためにint(またはunsigned int)にプロモートされるため、intよりも小さい型をとるバージョンを使用しても計算上の利点はありません。(これらは私の提案から入ったので、私は歴史をよく知っています)

于 2012-08-21T11:30:08.103 に答える