読者です 読者をやめる 読者になる 読者になる

std::endl

これまで、何となく気持ち悪いと思いつつ std::endl を使ってきました。
この気持ち悪さというのは「単に改行をしたい」という場合と「バッファフラッシュをしたい」場合は異なるということ。
std::endl の実装では、

// Microsoft Visual Studio 2005 い含まれる iostream より抜粋
_Ostr.put(_Ostr.widen('\n'));
_Ostr.flush();
return (_Ostr);

のように、明示的なバッファフラッシュが実行されます。単に改行したいと場合は "\n" リテラルか、改行符号('\n')を出力するのが良いのでしょうね。
でも、std::cout に対し << をずらずら書いて出力するのは面倒でもあるし、個々の出力要素の関連がわかりにくいので、print()系にはかなわないですね。Cの関数に馴染み過ぎてるってのもあるのでしょうけど。やっぱりboost::format() ですかね。

ところで、この format とか、STLの関数とかの名前ってCommon Lispからきているものなんでしょうかね。類似性を感じるのですが。