Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解C+中的istringstream时遇到问题+; 我是C++新手,我想知道我如何理解函数和类的作用。例如,我被告知使用“istringstream”做家庭作业。我在网上查了一下,找到了一个有很多参考资料的网站cplusplus.com。我的问题是理解这个问题_C++_String_Istringstream - Fatal编程技术网

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

理解C+中的istringstream时遇到问题+; 我是C++新手,我想知道我如何理解函数和类的作用。例如,我被告知使用“istringstream”做家庭作业。我在网上查了一下,找到了一个有很多参考资料的网站cplusplus.com。我的问题是理解这个问题,c++,string,istringstream,C++,String,Istringstream,在“istringstream”参考页上,我得到了以下代码: // istringstream constructors. #include <iostream> // std::cout #include <sstream> // std::istringstream #include <string> // std::string int main () { std::string stringvalues = "12

在“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;
}
我如何解释这句话?从我看来,这是一个只接受一个参数的函数,但什么是“ios_base::openmode which=ios_base::in”。

我相信。这定义了神秘的
>
操作符。它以几种不同的方式重载,这意味着它的工作方式类似于针对几种不同数据类型的
scanf
函数

您的编译器查看
iss>>val
并说:“嗯…
iss
是一个
istringstream
val
是一个
int
。啊哈!看起来
istringstream
有一个
操作符>
接受
int&
,我会用它!”

编辑:
istream
有一个
操作符>
用于
int&
istringstream
继承了它们。

将其视为
std::string
的流接口适配器

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

行:
default(1)显式istringstream(ios\u base::openmode,其中=ios\u base::in)
正在声明一个构造函数,该构造函数接收默认参数名
,该参数名
具有默认值
ios_base::in
(这表示您可以从流中读取)

稍后使用的“iss>>val”。这是我感到困惑的部分。它到底做什么

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

中,如果你让你感到困惑,那么你就需要覆盖一些基本原理,并且应该阅读C++上的一些介绍性材料。你可以从重新阅读你所得到的任何材料或者如果没有帮助的时候开始,找到一个C++基础教程或书籍来补充这一材料。你理解什么是<代码> STD::CIN > Val.;代码>可以吗?如果是这样,解释
istringstream
就相当容易了。如果没有,你需要获得更多的基本C++理解。如果你的家庭作业告诉你在你确定函数是什么之前使用IOFFASS…我想你现在可以学习魔法咒语,它的工作原理将在后面介绍。文档现在可能处于错误的抽象级别。如果你的课程从来没有解释过这是如何工作的,那是一个糟糕的过程,你应该读一本好书。谢谢你的建议,你们有什么好的C++初学者的书吗?如果不是的话,我会自己找一些。
default (1)   explicit istringstream (ios_base::openmode which = ios_base::in);