C++ bool类型变量cin输入true,输出结果却是false?是因为cin输入的true会被当成字符串,所以bool变量原值不变吗?
创始人
2024-03-06 22:49:44
0

首先,大家可能看过其他文章,他们给出的观点是这样的:

在C++中bool类型的变量初始值为false,所以如果你不初始化,那么对变量使用cin>>赋值true和false的时候,编译器会把true和false当成是字符串,因此bool变量的值不会变,还是原来的false,所以输出结果为0;

并且他还给出了验证,如下:

看起来没毛病,并且他们还验证了如果不初始化变量aaa那么它的值为false这个结论,由于局部变量不赋值无法输出,所以使用了全局变量,如下:

也是没有毛病,所以他的观点验证完毕;

但是呢,在这里我想说的是,上面这个观点只说对了一半 

C++中bool的全局变量如果不初始化,那么默认为false没毛病;

编译器会把true和false当成字符串,也没毛病;

但是bool变量如果赋值true和false这样的字符串的话,原来的值不会变,这句话就有问题了; 

真正的结论应该是:如果给bool变量使用cin等赋值字符串的话,编译器看到字符串会当成0;

我们还是使用第一次验证的代码,我们这次一个一个的给这些bool变量赋值,如下:

aaa:

bbb:

ccc: 

我们看到,无论bool变量有没有赋初始值,并且无论初始化是true还是false,一旦我们使用cin给bool变量赋值true和false,编译器都会当成字符串,所以bool变量的值都会变成0;

那么为什么我们文章开头使用别人的论证方法,他们输出的结果看起来也没毛病呢?

我们再仔细看看:

编译器以为我们的三个true加上中间的空格是同一个字符串,所以整个"true true true\n"这么一个字符串编译器只赋值给了aaa,因为我们上面说的,如果使用cin等赋值字符串的话,那么变量aaa的值会变成0,也就是false; 

如果不相信这个结论的话,可以再次尝试,这次我们把aaa初始化为true,如下:

没毛病了。大家也可以尝试其他字符串,结果也会是0;另外,如果输入数字的话,那么除了0,其他都是1;

总结:

1、C++bool类型全局变量,如果不赋初始值的话,默认为false;

2、如果bool类型变量使用cin等等进行赋值true和false的话,编译器会把true和false当成字符串,最终导致被赋值的变量输出结果为0(false); 

3、我们一般定义bool变量的时候都会赋初始值,并且再之后给bool变量赋值的时候我们一般都是直接赋值,比如aaa=true;而不是cin>>aaa;如果使用cin赋值bool的话,我们一般输入0(false)或者1(true);

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...