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

  • 相关阅读:
    设计模式——创建型
    Go采集代理框架
    计算机毕业设计(附源码)python疫情下的学生出入管理系统
    【Vue3 源码解析】to 系列全家桶
    Windows桌面便笺 - 置顶任务TODO - 便利贴工具
    Matplotlib 是一个广泛用于 Python 数据可视化的库
    Go语言学习基础(二)编写注意,数据类型,关键字,标识符等
    电力系统潮流计算与PowerWorld仿真(牛顿拉夫逊法和高斯赛德尔法)(Matlab实现)
    网络运维的挑战与解决方案:塑造无缝、高效的IT环境
    使用树莓派学习Linux系统编程的 --- 库编程(面试重点)
  • 原文地址:https://blog.csdn.net/qq_52572621/article/details/128115500