如何在初始化的同一行检查流是否失败

How to check stream for failure in same line as initialization?

本文关键字:一行 检查 失败 是否 初始化      更新时间:2023-10-16

我能做到这一点吗?

if (auto&& ifs = std::ifstream("main.cpp") && ifs)
{
    std::string word;
    ifs >> word;
    std::cout << word;
}

我的错误是use of 'ifs' before deduction of 'auto'。我想避免在单独的行中初始化和检查错误。我的意图是限制流的范围。

你需要检查你的输入是否成功,所以你最好做这样的事情:

std::string word;
if (std::ifstream("main.cpp") >> word) {
    std::cout << word;
}

如果你需要使用流对象进行其他操作,你可以使用

if (std::ifstream ifs{"main.cpp"}) {
     // code as before with input checking added, of course
}

只需去掉&& ifs。赋值表达式的值是赋值后ifs的值,如果打开成功,则为true。

错误是因为您正在从值std::ifstream("main.cpp") && ifs初始化ifs,该值是循环的;您不能期望计算该表达式,因为在计算该表达式时尚未定义ifs