私が知る限り、ストリームエラーを処理する2つのオプションはperror
とストリーム例外です。両方のオプションは望ましくありません。perrorのC++に相当しますか?
PERROR実装定義のメッセージを返します。ここに理由です。このメッセージは、すべてのシステムstd::strerror
std::strerror
に常に有用ではありませんstd::strerror
によって返されたポインタはCライブラリは技術的にC++で「非推奨」されを無効にすることができますスレッドセーフ
ではありません。ほぼ常にC++のishと同等です。私は潜在的なC++
例外は、すべてのプログラム
しばらくの間、適切ではありません同等
ストリームの例外があるときPOSIXやCに依存しなければならない理由はありません
std::strerror
は有用なエラーメッセージを出力することがありますが、ストリーム例外は決してになると便利なエラーメッセージが表示されます。f.exceptions(f.failbit)
を指定すると、ファイルのオープンに失敗した場合、または抽出に失敗した場合は、スローされた例外はstd::ios_base::failure
、what()
は "basic_ios::clear
"となります。std::system_error
とstd::ios_base::failure
の交換
SYSTEM_ERROR
はまったく同じ結果が得られます。
ios_base::failure
例外を投げ、実装が失敗の具体的な理由 を識別ec
の値を提供することを奨励 をしている:私たちはN2769: Detailed Reporting for Input/Output Library Errors (Revision 2)
で見てみるならば、なぜ、私たちは見ることができます。 【注 - オペレーティング 系から生じるエラーは通常、オペレーティングシステムによって報告されたエラー番号の エラー値とsystem_category
エラーとして報告されます。ストリーム・ライブラリ内から生じる エラー典型的error_code(ioerrc::stream, iostream_category
として報告 あろう) - 端 音符]。上記の文言は、正しいことを行うための実装のための唯一の規範的な励ましを提供し、ひいては ユーザーに有用な結果を生成するために市場の力 や実装の良い内包に依存しています。より強いもの(例えば、 "に変更する"など)は多くの追加仕様を必要とし、 の範囲を超え、LWGが現実的にC++ 0xに対応できる範囲を超えています。
代替あなたは何をやっている知っている限り、潜在的にかさばるサードパーティのライブラリに依存している(私はブーストあなたの探しています)、あるいは、あなたがやりたいことはありませんそれ(ロールを手にしています)私はこれを行うにはC + +の標準ライブラリの方法を探しています。何かありますか?
['std :: system_error'](http://en.cppreference.com/w/cpp/error/system_error) –
@πάνταῥεlookを参照してください。その理由を説明しましたどちらもうまくいかないでしょう。 – user5371056
POSIXには、 'strerror_r()'があります。 – Davislor