getstream的ifstream类决议

时间:2015-12-02 07:02:51

标签: c++ class std ifstream

所以我在使用我的代码实际编译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类的成员。根据我的理解,ifstream类是iostream的成员。

为什么:

std::ifstream::getline

不行吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

std::getlinestd::string namespace stdstd::istream中的“自由函数”而不是std::ifstream中的“成员函数”的原因很简单:设计师C ++不希望使流组件依赖于C ++字符串。 const char*构造函数将文件名作为std::string而不是 private string GetPathToImage (Android.Net.Uri uri) { string path = null; // The projection contains the columns we want to return in our query. string[] projection = new[] { Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data }; using (ICursor cursor = ManagedQuery (uri, projection, null, null, null)) { if (cursor != null) { int columnIndex = cursor.GetColumnIndexOrThrow (Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data); cursor.MoveToFirst (); path = cursor.GetString (columnIndex); } } return path; } 的完全相同的原因 - 以避免不必要的模块间依赖性。

答案 1 :(得分:0)

std::getline是名称空间std中的单独函数,而std::basic_istream::getline是同名std::basic_istream的成员。

历史上std::basic_istream::getline仅限于char*缓冲区输入,与std::fgets()非常相似,而std::getlinestd::basic_string配合使用,让您不必担心缓冲区分配等