名前空間
変種
操作

std::cerr, std::wcerr

From cppreference.com
< cpp‎ | io
 
 
 
 
ヘッダ <iostream> で定義
extern std::ostream cerr;
(1)
extern std::wostream wcerr;
(2)

グローバルオブジェクト std::cerr および std::wcerr は、標準 C エラー出力ストリーム stderr に関連付けられた、実装定義の型 (std::streambuf および std::wstreambuf からそれぞれ派生) のストリームバッファへの出力を制御します。

これらのオブジェクトは、型 std::ios_base::Init のオブジェクトが最初に構築される際、またはそれ以前に初期化されることが保証されており、順序付けられた初期化を持つ静的オブジェクトのコンストラクタとデストラクタで使用可能です (オブジェクトが定義される前に <iostream> がインクルードされている限り)。

std::ios_base::sync_with_stdio(false) が発行されていない限り、これらのオブジェクトには、フォーマットされた出力と非フォーマット出力の両方について、複数のスレッドから同時に安全にアクセスできます。

一度初期化されると、(std::cerr.flags() & unitbuf) != 0 (std::wcerr も同様) となり、これらのストリームオブジェクトに送られた出力はすべて、( std::basic_ostream::sentry のデストラクタを介して) OS に即座にフラッシュされます。

さらに、std::cerr.tie()&std::cout を返します (std::wcerrstd::wcout も同様)。これは、std::cerr での出力操作はすべて、まず std::cout.flush() を実行することを意味します ( std::basic_ostream::sentry のコンストラクタを介して)。

目次

[編集] 備考

名前に含まれる「c」は「character」を指します (stroustrup.com FAQ)。cerr は「character error (stream)」、wcerr は「wide character error (stream)」を意味します。

[編集]

std::cerr を介した stderr への出力は、std::cout の保留中の出力をフラッシュしますが、std::clog を介した stderr への出力はフラッシュしません。

#include <chrono>
#include <iostream>
#include <thread>
using namespace std::chrono_literals;
 
void f()
{
    std::cout << "Output from thread...";
    std::this_thread::sleep_for(2s);
    std::cout << "...thread calls flush()" << std::endl;
}
 
int main()
{
    std::jthread t1{f};
    std::this_thread::sleep_for(1000ms);
    std::clog << "This output from main is not tie()'d to cout\n";
    std::cerr << "This output is tie()'d to cout\n";
}

実行結果の例

This output from main is not tie()'d to cout
Output from thread...This output is tie()'d to cout
...thread calls flush()

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 455 C++98 std::cerr.tie()
std::wcerr.tie() はヌルポインタを返していました
それらは &std::cout
&std::wcout をそれぞれ返します

[編集] 関連項目

標準ストリームオブジェクトを初期化する
(std::ios_base の public メンバクラス) [編集]
標準Cエラー ストリーム stderr に書き込む
(グローバルオブジェクト)[編集]
標準C出力ストリーム stdout に書き込む
(グローバルオブジェクト)[編集]
入力ストリームに関連付けられた FILE* 型の式
出力ストリームに関連付けられた FILE* 型の式
エラー出力ストリームに関連付けられた FILE* 型の式
(マクロ定数) [編集]
English 日本語 中文(简体) 中文(繁體)