3

ある場合は、新しい、つまり名前のファイルにargv[1]データを入れたいと思います。しかし、そのような議論がない場合は、代わりに使用したいと思います。ofstream(argv[1])argv[1]cout

私はもう試した

std::ostream& output = argc >= 1 ? std::fstream(argv[0]) : std::cout;

ただし、コンストラクターが削除されているため、コンパイルされません。

4

3 に答える 3

6

fstreamインスタンスを作成し、必要になるまで開くのを遅らせることができます。

std::fstream file;
if (argc > 1)
    file.open(argv[1]);

std::ostream& output = argc > 1 ? file : std::cout;
于 2012-10-19T18:57:18.770 に答える
3

これが真のC++11ソリューションです。

ostream& out = [=]() -> ostream& {
    if (argc>1) {
        static fstream fs(argv[1]);
        return fs;
    }
    return cout;
}();
于 2012-10-19T19:42:18.653 に答える
2

異なるタイプの三項演算子を使用することはできません。コンパイラーは、結果のタイプを決定できません。

あなたは試すことができます

if (argc >= 1)
{
    std::fstream   Output(argv[0]);
    Process_data(Output);
}
else
    Process_data(std::cout);
于 2012-10-19T18:57:59.100 に答える