3

如果有argv[1]我想把一些数据放到新的ofstream(argv[1])ie 文件中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 回答