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


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

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

    4、true、false、字符串、0这些内容在控制台给一个bool类型变量赋值时,返回结果都为false(0);任意除0以外的数字,在控制台给bool类型变量赋值时,返回结果都为true(1);

  • 相关阅读:
    JDK8新特性 - Lambda表达式
    IT运维管理平台助力企业打造监、管、控一体化
    Leecode热题100中图论章节 200. 岛屿数量 994. 腐烂的橘子 207. 课程表 208. 实现 Trie (前缀树)
    解决axios发送post请求,springMVC接收不到数据问题
    vue三种import导入方式详解?
    GitHub限时开源36小时的阿里Java架构师学习手册,上线即标星35k+
    课堂笔记| 第四章 类的高级特性
    Ubuntu20.04安装NVIDIA CUDA全纪录+解决SSH一段时间自动断开报Destination Host Unreachable
    2022腾讯全球数字生态大会【存储专场】它来了|预约有礼
    JSP pagecontext对象的简介说明
  • 原文地址:https://blog.csdn.net/qq_52572621/article/details/128115500