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

news2024/11/26 4:32:52

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

在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.coloradmin.cn/o/48338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode每日一题:895.最大频率栈~~~Map+栈】

题目描述 设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。 实现 FreqStack 类: FreqStack() 构造一个空的堆栈。 void push(int val) 将一个整数 val 压入栈顶。 int pop() 删除并返回堆栈中出现频率最高的元素。 如果…

[附源码]Python计算机毕业设计Django的酒店预订系统设计与实现

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

深度学习快速入门----Pytorch 系列3

注:参考B站‘小土堆’视频教程 视频链接:【PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】 系列文章: 深度学习快速入门----Pytorch 系列1 深度学习快速入门----Pytorch 系列2 深度学习快速入门--…

[附源码]计算机毕业设计JAVA小区供暖收费管理系统

[附源码]计算机毕业设计JAVA小区供暖收费管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

世界杯小组赛频繁爆冷?这或许是强队的谋略 一分钟带你了解2022卡塔尔世界杯赛制

今年的世界杯你赚到钱了吗? 我们这里所说的世界杯是指世界杯决赛圈,也被叫做世界杯正赛。参赛队伍是已经通过世界杯预选赛选拔出的的32支队伍(除了东道主卡塔尔自动晋级)。 世界杯中没有皇马、巴萨、曼联,这些都是俱乐…

基于 SpringBoot + MyBatis 的网页版五子棋对战

目录 一、项目所要实现的功能模块 1、用户模块 2、匹配模块 3、对战模块 二、使用技术 三、项目截图 1、登录页面 2、注册页面 3、游戏大厅页面 4、游戏房间页面 四、创建 SpringBoot 项目 1、在 IDEA 中创建一个 SpringBoot 项目 2、设置项目名称 3、选择项目依…

第2-4-9章 规则引擎Drools实战(2)-信用卡申请

文章目录9.2 信用卡申请9.2.1 计算规则9.2.2 实现步骤9.2 信用卡申请 全套代码及资料全部完整提供,点此处下载 本小节我们需要通过Drools规则引擎来根据规则进行申请人的合法性检查,检查通过后再根据规则确定信用卡额度,最终页面效果如下&a…

浅谈架构备考.补缺.V1

2022.11.28 可靠性分析 to repair to failure between failure 平均故障间隔时间。平均故障间隔时间(Mean Time Between Failure,MTBF)常常与 MTTF 发生混淆。 因为两次故障(失败)之间必然有修复行为,因…

SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑

前言: 1、大家都知道,Springboot主启动加载会默认扫描同级包目录下所有的组件类、配置类,然后进行解析注入到Spring容器中。SpringBootApplication 是个联合注解,里面包含了 ComponentScan 组件扫描注解,所以我们不需要…

沉睡者IT - 什么是NFT?

欢迎关注沉睡者IT,点上面关注我 ↑ ↑ NFT,全称为Non-Fungible Token,指非同质化通证,实质是区块链网络里具有唯一性特点的可信数字权益凭证,是一种可在区块链上记录和处理多维、复杂属性的数据对象。 以上是百度百科…

MongoBd 离线安装与管理

背景: 鉴于内部网络原因,可能一个简单的操作变得复杂化,现在就Mongodb的离线安装分享本人的操作经验: 材料: 操作系统:centos7.6 MongoDB(主程序) : mongodb-linux-x86_64-rhel70-6.0.1.tgz 下载地址:下载…

传输层协议 —— UDP

目录 一、端口号的划分范围 二、认识知名端口号 三、两个问题 四、nestat和pidof命令 五、UDP协议 1. UDP首部格式 2. UDP的特点 3. 面向数据报 4. UDP的缓冲区 5. UDP使用注意事项 6. 基于UDP的应用层协议 一、端口号的划分范围 端口号的长度是16位,因此…

博途PLC和MATLAB矩阵运算存储方法对比

MATLBA不用多说,号称矩阵实验室可想而知在MATLAB里对矩阵的存储、运算非常简单、高效。如下图简单定义一个5*3的矩阵 1、rand(5*3) 上面利用rand()函数简单的实现了内存矩阵存储空间分配+附随机初值,下面我们看下博途里的矩阵定义存储方法。 BP神经网络PID算法的PLC实现过程…

量表如何分析?

一、什么是量表 量表是一种测量工具,通常用来测量人们的主观态度、意见或价值观念。我们经常会在问卷中使用量表对调查对象进行测量,最常见到的就是李克特量表。 ‍1、定义:李克特量表 李克特量表是最常用的量表,是由美国社会心…

基于AD Event日志检测LSASS凭证窃取攻击

01、简介 简单介绍一下,LSASS(本地安全机构子系统服务)在本地或域中登录Windows时,用户生成的各种凭证将会存储在LSASS进程的内存中,以便用户不必每次访问系统时重新登录。 攻击者在获得起始攻击点后,需要获取目标主机上的相关凭证…

AutoCAD Electrical 2022—项目特性

当绘图的过程中如果弹出上面的对话框,就是库和图标菜单途径不对造成的; 点击浏览找到正确的位置或点击默认设置恢复默认的路径; 元件对应原理图的设置; 标记格式:放置元件的代号的格式; 线号:编…

iphone怎么传数据到另一个手机,苹果如何转移数据到新手机,两台iphone怎么同步所有数据

换新手机后,需要迁移旧苹果手机的数据到新苹果手机里面,那么,iphone怎么传数据到另一个手机?本篇文章带您深度了解苹果手机的数据传输技巧。 方法一、通过“快速开始”传输数据 苹果手机如何数据传输?我记得之前换 iP…

【JUC】信号量Semaphore详解

前言 大家应该都用过synchronized 关键字加锁,用来保证某个时刻只允许一个线程运行。那么如果控制某个时刻允许指定数量的线程执行,有什么好的办法呢? 答案就是JUC提供的信号量Semaphore。 介绍和使用 Semaphore(信号量)可以用…

Servlet API 表白墙

Servlet API 详解 主要三个: 1.HttpServlet 2.HttpServletRequest 3.HttpServletResponse 1.HttpServlet 方法名称 调用时机 init 在 HttpServlet 实例化之后被调用一次 destroy 在 HttpServlet 实例不再使用的时候调用一次 service 收到 HTTP 请求的时候调用 …

vue开发测评系统思路及踩坑

最近公司做了一个测评系统,因为时间很短,本以为会很简单,没有想到踩了很多坑。 先看下部分效果图吧 然后在说下需求 1:所有的答案都是动态的(例如选择是出来的是第二题,选择否出来的是第五题&#xff09…