获取文件内容并将其放入C ++中的字符串中

时间:2015-04-20 01:08:30

标签: c++ string file-io constructor

我正在使用OpenGL,我需要将VertexShader.glsl的内容放入std :: string

我已经查看了相关的StackOverflow帖子,但我真的不知道如何将数据类型和内容匹配在一起以使其工作。

Read file-contents into a string in C++

为例
#include <fstream>
#include <string>

int main(int argc, char** argv)
{

  std::ifstream ifs("myfile.txt");
  std::string content( (std::istreambuf_iterator<char>(ifs) ),
                       (std::istreambuf_iterator<char>()    ) );

  return 0;
}

我不知道

之后发生了什么
  

std :: string content

每次我使用std :: string之前就像

一样
std::string name = "2bdkid";

1 个答案:

答案 0 :(得分:9)

它是constructor #6 here

template< class InputIt >
basic_string( InputIt first, InputIt last,
              const Allocator& alloc = Allocator() );

其中:

  

使用范围[first, last)的内容构造字符串。

istreambuf_iterator是:

  

一个单行输入迭代器,它从std::basic_streambuf (本例中为ifs对象中读取连续的字符...构造它的默认值std::istreambuf_iterator被称为流末端迭代器。当有效std::istreambuf_iterator到达基础流的末尾时,它变得等于流末尾迭代器。

content是由迭代器对构造的 - 第一个是我们在文件中的单遍迭代器,第二个是作为哨兵的流末端迭代器。在这种情况下,[first, last)构造函数引用的范围string是文件的完整内容。