2

我是 C++ 新手,我想知道如何理解函数和类的作用。例如,有人告诉我在家庭作业中使用“istringstream”。我在网上查了一下,发现网站 cplusplus.com 有很多参考资料。我遇到的问题是理解参考页

在“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 对象,后来使用了“iss >> val”。那是我感到困惑的部分。它究竟是做什么的?

我已经尝试阅读上面的文本,它解释了类中每个函数的作用,但我一个都不懂。例如,参考页面上的第一行之一说

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

我如何解释这条线?据我所知,它是一个接受一个参数的函数,但什么是“ios_base::openmode which = ios_base::in”。

4

3 回答 3

3

将instd::istringstream视为std::string.

就像std::string在控制台或文件中写入并使用std::cinor读取一样std::ifstream,它提供了用于读取底层存储(在本例中)的接口(get()、、peek()等... std::string)。其余的operator>>重载可能使用基本的读取函数来读取自定义类型(int、、double等)。

行:default (1) explicit istringstream (ios_base::openmode which = ios_base::in);正在声明一个构造函数,该构造函数接收which具有默认值的默认参数名称ios_base::in(这表明您可以从流中读取)

于 2014-09-10T15:41:06.680 回答
2

我相信这是您正在寻找的页面。这定义了那个神秘的>>运算符。它以几种不同的方式重载,这意味着它可以像scanf函数一样用于几种不同的数据类型。

你的编译器看着iss >> val并说“嗯......iss是一个istringstream并且val是一个int。啊哈!看起来istringstream有一个operator>>需要一个int&,我会用它!”

编辑: istream有一个operator>>for int&istringstream继承那些。

于 2014-09-10T15:34:11.733 回答
1

后来使用了“iss >> val”。那是我感到困惑的部分。它究竟是做什么的?

该表达式iss >> val是函数调用的“语法糖”, iss.operator>>(val)其中形式参数被定义为对 int 值的引用。该函数本身获取该位置的地址val并在该位置写入一个新值。这应该由>>原始表达式中的符号“符号化” iss >> val

于 2014-09-10T15:48:07.013 回答