c++中istream类型到bool类型的隐式转换

事情的起因是见到了这种用法:

while(cin>>m>>n&&m&&n)

{

}

现在分析一下,cin>>m>>n返回的是一个对istream类型的引用,然后这个返回值又与m做&&运算。已知这种写法是合法的。

可能有两种情况:(1)&&运算符被重载,允许接收istream类型的值。

(2)istream类中有成员能将istream类型转换为bool类型。

翻看手册,发现是第二种情况。http://www.cplusplus.com/reference/istream/istream/

有个继承自ios类的成员函数 operator bool(c++11标准)。这个函数返回值的依据是 若failbit 或 badbit 标志位有一个被设置就返回false。

所以正常情况 istream 转换为bool值是true,所以文章前面提到的用法是没问题的。

更详细的说明可在文章给出的链接中找到。

时间: 2024-08-06 11:57:34

c++中istream类型到bool类型的隐式转换的相关文章

oracle 表字段类型,与业务SQL不合理,导致的隐式转换

今天遇到一个生产问题,业务SQL很简单,单表查询,而且表只有三个字段,有个主键ID,而且通过主键ID过滤,业务页面会传一百多个ID过来调用SQL,这个表数据量大小为100多万,但是偏偏这条SQL执行跑了15秒,完全影响业务不能使用. select a,b,c from t where t.id in (1111,222,333,444,555..........) 我一开始并没有去查看表设计,而是直接看了执行计划, 1 alter session set statistics_level=all

Scala 中的隐式转换 implicit

Scala语言中的隐式转换是一个十分强大的语言特性,主要可以起到两个作用: 一.自动进行某些数据类型的隐式转换 String类型是不能自动转换为Int类型的,所以当给一个Int类型的变量或常量赋予String类型的值时编译器将报错.所以,一下语句是错误的. val x: Int = "100" 如果需要将一个字符串类型的整形数值赋给Int,比如使用String.toInt方法,例如: v al x: Int = "100".toInt 如果想让字符串自动转换为整形,

SQL Server中提前找到隐式转换提升性能的办法

    http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁.那如果在事情出现之前发现了这类潜在的风险岂不是更好?     那么我们来看一个简单的例子,如代码清单1所示.   1: SELECT * 2: FROM HumanResources.Employee 3: WHERE NationalIDNumber = 243322160 4:  5: SELECT * 6: FR

Mysql中的隐式转换

在mysql查询中,当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引,下面分析两种隐式转换的情况看表结构phone为int类型,name为varchar类型 EXPLAIN select * from user where phone   = '2' EXPLAIN select * from user where phone   = 2 两种情况都可以用到索引,这次等号右侧是'2',注意带单引号哟,左侧的索引字段是int类型,因此也会发生隐式转换,但因为int类型的数

小问题,小细节要注意(string类型转换为bool类型)

一个表中的推荐字段是bit类型的,添加的时候推荐有两个值,如<asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatDirection="Horizontal"> <asp:ListItem Text="是" Value="1"></asp:ListItem> <asp:ListItem Tex

Atitit.变量的定义&#160;获取&#160;储存&#160;物理结构&#160;基本类型简化&#160;隐式转换&#160;类型推导&#160;与底层原理&#160;attilaxDSL

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3. 变量的存储,储存在变量池里Map(varName,varVal)1 1.3.1. 复合变量1 1.4. 变量类型简化: 字符串 数字,  bool1 1.5. 变量自动隐式转换2 1.6. 类型推导2 2. 参考 复合变量2 1.1. $ 美元字符, php 黑头 1.2. 默认变量的范围和声明

隐式转换——内置数据类型

概述 隐式转换是指在初始化或赋值或函数调用时编译器隐式完成的不同类型之间的转换 常量转内置类型 对于没有任何常量后缀的整型或者浮点型在进行初始化或赋值或作为函数实参传递时需要进行常量类型匹配 整型 int->long int顺序匹配 浮点型 默认都是double类型 用常量初始化或者赋值给内置类型变量时,编译器会判断常量的值是否在内置类型变量取值范围内,如果在内置类型变量取值范围内,编译器会正确初始化或者赋值,否则,编译器会给出警告提示 内置类型之间转换 布尔型转算术类型(整型和浮点型) tru

用隐式转换实现类型或结构体直接赋值

在vs中敲一句string s="aaa"; 你会发现string是个class,一般咱们给类型赋值的时候都是先new一个,然后再给其属性赋值,string却能直接赋值,顿时感觉很神奇 当然,在stirng s = "aaa";中,右面的“aaa”它其实就是个string类型,所以直接=是没有问题的 但是,由string s ="aaa";我们就可以提出一个假象,咱们自己定义的class能不能也实现类似的效果呢? 答案显然是肯定的~~~~ 这需要

利用implicit关键字做自定义类型隐式转换

在C#中,implicit关键字可以用来做自定义类型隐式转换.下面给个例子来说明. 先定义一个Point类,表示一个点: public class Point { public double X { get; set; } public double Y { get; set; } } 再在Point类中定义一个静态方法,用于由字符串隐式转换为Point类型: public class Point { public double X { get; set; } public double Y {