http://ideone.com/RdINqaに示されているように、std::stoul
は、負の数の場合はstd::out_of_range
を投げませんが、それらをラップします。どうしてこれなの? -4のようなものは、タイプunsigned long
の範囲外ですので、投げるべきです。std :: stoulが負の数を変換するのはなぜですか?
10
A
答えて
10
21.5数値変換
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
効果: ...
strtoul(str.c_str(), ptr, base)
[s]の呼び出しがあれば...、変換結果を返します。例外: ...
out_of_range
変換された値が戻り値の表現可能な値の範囲外の場合。
ここで、「変換された値」は、strtoul
が返す値です。もちろんunsigned long
のタイプであるため、返品タイプstoul
の表記可能な値の範囲外であることはできません。unsigned long
です。それはint
を返しますがlong
を返すstrtol
を使用しているため
は、私の知る限り、唯一stoi
、out_of_range
を投げることができます。
さらに、C標準でstrtoul
と指定されている場合は、文字列"-4"
を受け入れ、-(unsigned long)4
に等しい値を返す必要があります。なぜそれがこのように指定されたのか分かりません。
関連する問題
- 1. なぜstd :: uncaught_exceptionをstd :: uncaught_exceptionsに変更するのですか?
- 2. std :: stringで変換関数を使用できないのはなぜですか?
- 3. なぜこの変換が機能しないのですか?
- 4. C#数値のリストを負の数値に変換する
- 5. 参照への変換がboolへの変換を妨げているのはなぜですか?
- 6. コンパイラが型変換を実行しないのはなぜですか?
- 7. なぜstd :: copy_nはstd :: size_tではなくテンプレートパラメータを取るのですか?
- 8. std :: for_eachが非変更シーケンス操作であるのはなぜですか?
- 9. std :: stoiとstd :: arrayがg ++でコンパイルされないのはなぜですか?
- 10. 変数が数値で始まるのはなぜですか?
- 11. 負数と正数を正の値に変換する
- 12. cこれはなぜ、負の数値を出力するのですか?
- 13. std :: listの演算子[]がないのはなぜですか?
- 14. なぜC++のclock()関数が負の値を返すのですか?
- 15. なぜApplication.get_Caller(Type.Missing)は負の整数を返しますか?
- 16. なぜVByNetでは負のSByte番号が16ビットですか?
- 17. なぜstd :: unique_ptrにstd :: shared_ptrのようなエイリアシングコンストラクタがないのですか?
- 18. std :: timed_mutex :: try_lock_forが機能しないのはなぜですか?
- 19. std :: partitionにアウトオブプレイスバリアントがないのはなぜですか?
- 20. std :: stouがないのはなぜですか?
- 21. std :: on_exitがないのはなぜですか?
- 22. std :: shared_ptrに[]演算子がないのはなぜですか?
- 23. std :: protectがないのはなぜですか?
- 24. 過負荷参照変換
- 25. ODBCでカラムスキーマのDATA_TYPEが負の値になるのはなぜですか?
- 26. 整数をdoubleに変換できないのはなぜですか?
- 27. std :: to_stringのstd :: stringのオーバーロードがなぜ発生しないのですか
- 28. 配列要素を整数に変換してもう一方を変換するのはなぜですか?
- 29. PHP json_encode関数がUTF-8文字列を16進数のエンティティに変換するのはなぜですか?
- 30. JSキャンバスイメージを変換できないのはなぜですか?
ありがとう、それは迷惑です – Kal