麻烦理解C ++中的istringstream

时间:2014-09-10 15:28:01

标签: c++ string istringstream

我是C ++的新手,我想知道如何理解函数和类的功能。例如,我被告知使用" istringstream"做作业。我在网上看了一下,发现网站cplusplus.com有很多参考资料。我遇到的问题是理解reference page

在" istringstream"参考页面我给出了以下代码:

// istringstream constructors.
#include <iostream>     // std::cout
#include <sstream>      // std::istringstream
#include <string>       // std::string

int main () {

  std::string stringvalues = "125 320 512 750 333";
  std::istringstream iss (stringvalues);

  for (int n=0; n<5; n++)
  {
    int val;
    iss >> val;
    std::cout << val*2 << '\n';
  }

  return 0;
}

在上面的代码中,它确实完成了我需要它为我的任务做的事情,但我不明白为什么它的工作原理。所以他们创建了一个名为iss的istringstream对象,然后使用&#34; iss&gt;&gt; VAL&#34 ;.这是我感到困惑的部分。它到底是做什么的?

我试过阅读上面的文字,它解释了班级中每个功能的作用,但我不理解它。例如,参考页面上的第一行之一是

default (1)   explicit istringstream (ios_base::openmode which = ios_base::in);

我如何解释这一行?从我所看到的它是一个函数,它接受一个参数,但是什么是&#34; ios_base :: openmode which = ios_base :: in&#34;。

3 个答案:

答案 0 :(得分:3)

std::istringstream视为std::string的流接口适配器。

就像在控制台或文件中写std::string并使用std::cinstd::ifstream阅读一样,它提供了界面(get()peek()等...)用于读取底层存储(在本例中为std::string)。 operator>>重载的其余部分可能使用基本阅读函数来阅读自定义类型(intdouble等...)。

行:default (1) explicit istringstream (ios_base::openmode which = ios_base::in);声明一个构造函数,它接收默认值which并使用默认值ios_base::in(这表示您可以从流中读取)

答案 1 :(得分:2)

我相信this is the page you're looking for。这定义了神秘的>>运算符。它以多种不同的方式重载,这意味着它可以像scanf函数一样工作,用于几种不同的数据类型。

您的编译器会查看iss >> val并说&#34;嗯...... issistringstreamvalint。啊哈!看起来istringstream有一个operator>>需要int&,我会使用它!&#34;

修改: istream operator>> int&istringstream继承了这些。

答案 2 :(得分:1)

后来使用&#34; iss&gt;&gt; VAL&#34 ;.这是我感到困惑的部分。它到底是做什么的?

表达式iss >> val是&#34;句法糖&#34;用于函数调用 iss.operator>>(val)其中形式参数被定义为对int值的引用。函数本身采用val的地址并在此位置写入新值。这应该是&#34;符号化&#34;使用原始表达式>>中的iss >> val符号。