質問: c++でfprintfやprintf,fopenなどを使うのは好ましくない? 今までcは多少慣れがあり、一方でc++はごく最近始めました。 cとc++でパッと見明らかに違うのが入出力の関数とストリームだと思うのですが どうも私的にはcで使いっていたfprintfなどが使いやすいと思ってしまいます。 実数の表示の小数点以下の桁の指定とか、fprintf("xxxx%.3f")としたほうが ラクチンではないでしょうか? ただeffective c++などを見た感じc++ではc++のやり方のほうが良い とか書いてあってやはりそういうもんなのかなぁと。 それなら多少c++の利便性を切り捨ててでもcでやるかなぁと 思ってしまうのですが。。。 アドバイスいただけたら幸いです。お願いいたします。
回答: c++で printf() などを使うのは一概に悪いというわけではありません。 最低限、混在して使わなければ、まずはokです。 ただ、ひとつ考えて欲しいのは、 > fprintf("xxxx%.3f") としたほうが楽 なのは、単に、これまでcで使い慣れていたからという理由に過ぎません。本質的にそちらの方が楽というわけではないのです。 一方で、printf() 系列の問題点というのは、可変引数関数なので、引数の型判定が実行時にしかわからないという点があります。 int i; printf("%f", i); などとして、表示がおかしいのに悩んだりするのはよくあることです。 また、決定的なこととして、c++では、クラスという「自前の型(ちょっと違う)」を作ることができます。これは、printf() では直接扱うことができません。 しかし、 class myclass; // 適切に << を定義する myclass ainstance; int i; cout << ainstance << " → " << i << "\n"; のように、c++流のストリームを使えば、それらも統一的に扱うことができます。 また、引数の型が異なっても適切に処理されます。 このようなことを含めて、c++のパワーを使うには、c++の流儀が良いということです。