为什么这条线无限循环?

时间:2017-12-22 11:52:14

标签: c++ c++11

以下用于阅读文件的代码可以立即工作和完成。

auto copy = [&](const FileName &src, std::ofstream &dst)
{
    std::ifstream r(src);
    std::string line;
    while (std::getline(r, line)) { dst << line << std::endl; }
};

src是一个小文件,dst是一个工作输出流。如果我将循环更改为:

while (std::getline(std::ifstream(src), line)) { dst << line << std::endl; }

我的程序在while循环中永远运行。为什么无限循环?我正在使用Xcode C ++ 11。

3 个答案:

答案 0 :(得分:6)

因为每次在while循环中调用std::getline时,都会初始化新的std::ifstream(src)并始终获取文件的第一行。

答案 1 :(得分:2)

while (std::getline(std::ifstream(src), line)) { dst << line << std::endl; }

因为您在每次循环运行中初始化流。

答案 2 :(得分:1)

这是因为函数getline(stream, string)占据了流中的第一行。执行ifstream(src)时,您将从头开始创建新流。

希望这有帮助