为什么这条线是无限的循环

Why is this line infinite loop?

本文关键字:无限 循环 为什么      更新时间:2023-10-16

以下用于读取文件工作并立即完成的代码。

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; }

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

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

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

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

这是由于函数getline(stream, string)在流中的第一行而引起的。当您进行ifstream(src)时,您将创建一个新流并从头开始。

希望这有帮助