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::string
的 std::getline
是 namespace 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::getline 是 std::basic_istream
的同名成员。
历史上 std::basic_istream::getline
仅限于 char*
缓冲区输入,很像 std::fgets(),而 std::getline
与 std::basic_string
一起使用,让您不必担心缓冲区分配等
所以我在让 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::string
的 std::getline
是 namespace 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::getline 是 std::basic_istream
的同名成员。
历史上 std::basic_istream::getline
仅限于 char*
缓冲区输入,很像 std::fgets(),而 std::getline
与 std::basic_string
一起使用,让您不必担心缓冲区分配等