ifstream Class getline 的解析

ifstream Class Resolution for getline

所以我在让 getline 函数在我的代码中实际编译时遇到了一些困难,这是由于调用结构不正确造成的。

所以我想了解调用的实际工作原理。

我的代码包括:

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <iterator>
#include <string>
#include <vector>
#include <unistd.h>

因此,我在一个函数中执行了以下操作:

void getData(void)
{
    std:string lineIn;
    std::ifstream configFile(filePath.c_str(),std::ifstream::in);

    std::getline(configFile,lineIn);
}

现在我不明白为什么 getline 是通过常规 std 库解析的,即使它是 ifstream class 的成员。据我了解,ifstream class 是 iostream 的成员。

为什么:

std::ifstream::getline

不工作?

谢谢!

采用 std::stringstd::getlinenamespace std 中的 "free function" 而不是 std::istream 中的 "member function" 的原因是很简单:C++ 的设计者不想让流组件依赖于 C++ 字符串。 std::ifstream 构造函数将文件名作为 const char* 而不是 std::string 的原因完全相同 - 以避免不必要的模块间依赖性。

std::getline is a separate function in namespace std, while std::basic_istream::getlinestd::basic_istream 的同名成员。

历史上 std::basic_istream::getline 仅限于 char* 缓冲区输入,很像 std::fgets(),而 std::getlinestd::basic_string 一起使用,让您不必担心缓冲区分配等