【operator bool】while(cin >> str)是什么意思?

一、前言

 在oj题中,为了实现多行输入,我们经常可以看到这样的写法:while(cin >> str),这究竟是什么意思呢?为了理解其中的含义,我们首先需要对C++基础IO和运算符重载具有初步的认识。

二、cin是什么?

 我们常常使用 cin 从键盘中读取数据,那么首先思考一个问题,cin究竟是什么?其实它并不神秘,因为我们知道C++是面向对象的,cin本质上就是一个类型为 istream全局对象
在这里插入图片描述
istream 类中重载了流输入运算符,并且重载了所有的内置类型,因此我们当使用cin输入的时候,从来没有关心过数据的类型:
在这里插入图片描述
 我们注意到 operator>> 函数的返回值类型为 istream,其实就是将cin返回,这样做的好处是可以进行连续输入,例如:cin >> a >> b。显然istream类型不是整形,不能作为while循环的判断条件。因此我们不难反推出,这其中一定发生了隐式类型转化

三、隐式类型转化如何发生?

 这其实也是运算符重载带来的结果。在 istream 类中有一个特殊的运算符重载operator bool() ,它继承自基类 ios,提供一个本类型到bool类型的隐式类型转化。
 我们按下 ctrl + z 会从循环中退出,这也正是因为operator bool 被设置,从而返回false导致循环退出。
在这里插入图片描述
按照相同的道理,我们还实现本类型到int类型的转化等等,是不是很神奇呢?

class Date
{
    
    
public:
	Date(int year = 2023, int month = 1, int day = 13)
		: year_(year), month_(month), day_(day) {
    
    }
	
	// 细节:不要带返回值,重载的类型就是返回值的类型
	operator int()  
	{
    
    
		return year_ + month_ + day_;
	}

private:
	int year_;
	int month_;
	int day_;
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/whc18858/article/details/128676025
今日推荐