3

我是std::getline(...)处女,在cppreference.com查阅过文档和示例,但我对以下示例代码感到困惑:

#include <sstream>
#include <string>

int main(int argc, char* argv[])
{
    std::string line;
    std::ifstream infile("sample.txt");

    while (std::getline(infile, line))
    {
        // Do stuff
    }

    return 0;
}

...特别是 while 语句:while (std::getline(infile, line)).

std::getline(std::basic_istream<CharT,Traits>& input, ...)注明的文档说is的返回值input,即对第一个参数的引用。

那么,如何将 的返回值getline用作 while 循环的条件,它需要是 type bool

是否std::ifstream实施operator bool()

4

1 回答 1

3

std::ifstream 是否实现运算符 bool()?

它确实:

检查流是否没有错误。<...> 如果流没有错误并且准备好进行 I/O 操作,则返回 true。具体来说,返回!fail().

该运算符可以使用返回对流的引用作为循环条件的流和函数,从而产生惯用的 C++ 输入循环,例如while(stream >> value) {...}while(getline(stream, string)){...}

于 2016-10-28T06:05:30.497 回答