在 ss.clear() 之后使用 ss.str( " ") 用于新定义的字符串流
use of ss.str("") after ss.clear() for a newly defined string stream
(学习C++( 我一直在看下面的代码部分:
stringstream ss;
// more code
ss.clear();
ss.str("");
当ss.clear();
旨在删除字符串值时,为什么调用ss.str("");
?我打印出str()
值std::cout
,看到它的长度为零,没有行ss.str("");
那么为什么要包括它呢?
在我的研究中,我遇到了这个问题,@Johannes Schaub - litb 的公认答案也做了同样的事情。我错过了什么。
std::stringstream::clear()
继承自父类,并且 inheritage 源函数std::basic_ios::clear()
来自 CppReference(上面链接(:
通过为流错误状态标志分配状态值来设置它们。默认情况下,分配具有清除所有错误状态标志效果的
std::ios_base::goodbit
。
它不会清除stringstream
的内容,而是清除在以前的I/O操作中设置的所有错误标志(例如遇到EOF(。
清除字符串内容的实际语句是 ss.str("")
。
此示例演示了clear()
的功能:
using std::cout;
std::istringstream s("8");
int a;
s >> a;
cout << a; // Output: 8
a = 10;
s >> a;
cout << a << " " << s.eof(); // Output: 10 1
s.clear();
cout << s.eof() << " " << s.str(); // Output: 0 8
为什么是 ss.str("(;当 ss.clear((;是为了删除字符串值?
clear()
并不意味着删除字符串值。它旨在设置流状态标志。
stringstream ss;
ss<<1;
cout<<ss.str()<<endl; //prints 1
ss.clear(); // does not remove value from ss
cout<<ss.str()<<endl; //prints 1
ss.str(""); //this removes the value
cout<<ss.str(); //empty
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 在 ss.clear() 之后使用 ss.str( " ") 用于新定义的字符串流
- Qt c++ 聚合'std::stringstream ss'类型不完整且无法定义