在C++中理解istringstream有困难
Trouble understanding istringstream in C++
我是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"。
将std::istringstream
视为std::string
的流接口适配器。
就像在控制台或文件中写入std::string
并用std::cin
或std::ifstream
读取一样,它提供了读取底层存储(在本例中为std::string
)的接口(get()
、peek()
等)。其余的operator>>
重载可能使用基本的读取功能来读取自定义类型(int
、double
等)
行:default (1) explicit istringstream (ios_base::openmode which = ios_base::in);
声明了一个构造函数,该构造函数接收默认值为ios_base::in
的默认参数名称which
(这表示您可以从流中读取)
我相信这就是您要查找的页面。这定义了神秘的>>
运算符。它以多种不同的方式重载,这意味着它像scanf
函数一样用于多种不同的数据类型。
您的编译器查看iss >> val
并说:"嗯……iss
是istringstream
,val
是int
。啊哈!看起来istringstream
有一个operator>>
,它需要int&
,我会使用它!"
编辑:istream
有一个operator>>
作为int&
。istringstream
继承了这些。
后来使用了"iss>>val"。这就是我感到困惑的部分。它到底做什么
表达式iss >> val
是函数调用的"语法糖"iss.operator>>(val)
,其中形式参数被定义为对int值的引用。函数本身获取val
的地址,并在此位置写入一个新值。这应该由原始表达式iss >> val
中的>>
符号"象征"。
- 如何使用iStringstream读取和解析文本文件?
- istringstream >>运算符产生意外行为
- 在C++中使用istringstream读取输入时出错
- istringstream,num1 和 num2 在这里发生了什么?
- 来自 istringstream 的五倍输出
- 是否可以在不指定类型的情况下从 istringstream 转到向量?
- 使用 string_view 构造 istringstream 无法编译
- 有没有办法我可以从 istringstream 中读取两个字符
- istringstream将字符串放回输入并再次读取
- 为什么 istringstream 在流的末尾附加'-1'字符?
- 字符串向量到istringstream
- istringstream-function string_to_int不能接受C-STR,为什么
- 基于循环的C ISTRINGSTREAM范围没有开始成员
- 无法使用 istringstream 从.txt文件中读取
- 为什么当我将 std::locale 设置为 "zh_CN.UTF-8" 时 std::istringstream 失败?
- 修改 iStringStream 中的变量数
- NDK r16b std::istringstream 的行为不符合预期
- 如何在 c++ 中使用 istringstream
- 有没有办法重写一个返回指向 istringstream 的指针的函数,而不是返回一个引用?
- 这一行是怎么回事: istringstream is( line );