在 if 语句中使用字符串流>>运算符
using stringstream >> operator in if statement
以下代码片段旨在尝试使用字符串流对象从字符串中提取整数,并检测整数提取是否成功。stringstream类继承>>运算符以返回对istream实例的引用。整数提取失败如何导致myStream等于0,而其str成员仍然是strInput?
stringstream myStream(strInput);
if (myStream >> num){//successfull integer extraction}
else{//unsuccessfull integer extraction
cout<<myStream<<endl;
cout<<myStream.str().c_str()<<endl;}
stream
有一个operator bool()
或operator void*()
,它返回(类似于)!fail()
-或者在void *
失败时返回NULL。所以,如果流没有失败,那也没关系。operator >>
返回对stream
对象的引用,所以编译器说"嗯,不能将流对象与真值进行比较,让我们看看我们是否可以从中生成bool
或void *
,是的,我们可以,所以让我们使用它
答案在将std::ios
转换为void*
的运算符中(在C++11中替换为将basic_ios
转换为bool
的运算符):
从ios派生的流对象可以被投射到指针。如果设置了其中一个错误标志(故障位或坏位),则此指针为空指针,否则为非零指针。
当流在if
、while
或for
条件中使用时,会调用此运算符。对于需要编写的情况,还有一个一元!
运算符
if (!(myStream >> num)) {
...
}
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 是否需要使用 - &gt;运算符在C 中调用成员函数时