std::cerr
は標準エラー出力に関連付けられたバッファなしの出力ストリームオブジェクトで, std::endl
は改行文字を出力してバッファをフラッシュするマニピュレータ. そんなら, 標記のように std::cerr
に対して std::endl
を使うのはほとんど意味がなくて, std::cerr << "\n"
で十分なはずだよなぁ, むしろタイプ量が少ないんだから後者を使う方が良いよなぁ, と思うんだけど.
C++ 規格書が欲しい.
追記. 以下のコードをコンパイルして実行してみた. (g++ (GCC) 4.1.1 (Gentoo 4.1.1-r1))
#include <iostream>
#include <cstdlib>
#include <unistd.h>
void output_test(std::ostream& os)
{
os << "before ::sleep(2) -- ";
::sleep(2);
os << " -- after ::sleep(2), w/o std::endl\n";
os << "before ::sleep(2) -- ";
::sleep(2);
os << " -- after ::sleep(2), w/ std::endl" << std::endl;
return;
}
int main(void)
{
std::cout << "::output_test(std::cerr)" << std::endl;
::output_test(std::cerr);
std::cout << std::endl;
std::cout << "::output_test(std::clog)" << std::endl;
::output_test(std::clog);
std::cout << std::endl;
std::cout << "::output_test(std::cout)" << std::endl;
::output_test(std::cout);
std::cout << std::endl;
return EXIT_SUCCESS;
}
std::cout
とは違う, という事は分かったが, バッファの有無の違いしかないはずの std::cerr
と std::clog
とでは挙動の違いはなかった. 上のコードが適切でない事も考えられるけど…うぅむ.