C++ bool类型变量赋值true,输出结果却是false?是因为cin输入的true会被当成字符串,所以bool变量原值不变吗?

news/2024/12/23 8:25:11/

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

在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);


http://www.ppmy.cn/news/390.html

相关文章

NLP基本业务范围

1,文本纠错(query纠错),可用于爬取的新闻资讯等进行预处理,去掉错别字、可用于搜索业务中query词纠错、可用于对话中的智能改错。中文相关的纠错paper 两个指标:过纠率(FAR,也就误报率)&#x…

(02)Cartographer源码无死角解析-(32) LocalTrajectoryBuilder2D::AddRangeData()→点云的体素滤波

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

【数据结构】二叉树详解(下篇)

🧑‍💻作者: 情话0.0 📝专栏:《数据结构》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! 二叉树&…

计算机软件著作权评估

随着《著作权法》的完善,著作权出资在我国经济生活中必然将越来越普遍,也更加促进著作权这一传统知识产权的发展。 著作权客体之中有许多就具有很强的经营功能,有些甚至是某些类型的公司营业所需的主要资源,如文字作品之于图书出版…

别再问我Python打包成exe了!(终极版)

那今天我就给大家全面总结一下:Python如何打包成exe,以及如何打得足够小。 一、标准打包 目前比较常见的打包exe方法都是通过Pyinstaller来实现的,本文也将使用这种常规方法。如果对这块已经很熟悉的小伙伴,可以直接下滑到本文下…

PAT (Basic Level) Practice 1023~1044

PTA Basic Level Practice 解题思路和代码,主要用的是 C。每22题一篇博客,可以按目录来进行寻找。 文章目录1023 组个最小数1024 科学计数法1025 反转链表1026 程序运行时间1027 打印沙漏1028 人口普查1029 旧键盘1030 完美数列1031 查验身份证1032 挖掘…

LINUX安装openssl

openssl 官网下载 https://www.openssl.org/source/old/ 1、解压openssl包: tar -xzf openssl-1.1.1n.tar.gz2、得到openssl-1.1.1n目录,然后进入openssl-1.1.1n目录中,安装openssl到 /usr/local/openssl 目录,安装之后&#xff…

SpringMVC-全面详解(学习总结---从入门到深化)

目录 SpringMVC简介 MVC模型 SpringMVC SpringMVC入门案例 SpringMVC执行流程 SpringMVC的组件 组件的工作流程 SpringMVC参数获取_封装为简单数据类型 SpringMVC参数获取_封装为对象类型 封装单个对象 封装关联对象 SpringMVC参数获取_封装为集合类型 封装为Lis…