我是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;。
答案 0 :(得分:3)
将std::istringstream
视为std::string
的流接口适配器。
就像在控制台或文件中写std::string
并使用std::cin
或std::ifstream
阅读一样,它提供了界面(get()
,peek()
等...)用于读取底层存储(在本例中为std::string
)。 operator>>
重载的其余部分可能使用基本阅读函数来阅读自定义类型(int
,double
等...)。
行: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;嗯...... iss
是istringstream
而val
是int
。啊哈!看起来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
符号。