布尔类型及引用(三)-创新互联

    今天我们来学习下 C++ 中的布尔类型。说起布尔类型,有的同学可能在 C 语言中听过,0 代表假,1 代表真。我们在 C 语言中用 int 类型的数来表示布尔类型,这也是可取的。但是在 C++ 中正式引出了布尔类型这个概念,它是一种基本类型。C++ 中的 bool 可取的值只有 true 和 false,理论上 bool 只占用一个字节。注意:true 代表真值,编译器内部用 1 来表示;false 代表非真值编译器内部用 0 来表示。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名雅安服务器托管、营销软件、网站建设、正安网站维护、网站推广。

        bool 类型只有 true(非0)和 false(0)两个值,C++ 编译器会将非 0 值转换为 true,0 值转换为 false。下来我们来以代码为例进行分析

#include 

int main(int argc, char *argv[])
{
    bool b = false;
    int a = b;
    
    printf("sizeof(b) = %d\n", sizeof(b));    // 1
    printf("b = %d, a = %d\n", b, a);        // 0, 0
    
    b = 3;
    a = b;
    
    printf("b = %d, a = %d\n", b, a);        // 1, 1
    
    b = -5;
    a = b;
    
    printf("b = %d, a = %d\n", b, a);        // 1, 1
    
    a = 10;
    b = a;
    
    printf("a = %d, b = %d\n", a, b);        // 10, 1
    
    a = 0;
    b = a;
    
    printf("a = %d, b = %d\n", a, b);        // 0, 0
    
    return 0;
}

        我们分析下,第 8 行打印 bool 类型 b 的内存大小,那么便是为 1 了。由于它初始化为 false ,所以为 0, a = b 当然也为 0 了;第 11 行 b 为非 0。所以第 14 行打印出 1, 1;第 16 行 b 为非 0。所以第 19 行打印出 1, 1;第 21 行 a 为 10,所以第 24 行打印出 10, 1;第 26 行 a 为 0,所以第 29 行打印出 0, 0啦。我们看看编译结果

布尔类型及引用(三)

        因为布尔类型是 C++ 中的基本数据类型,所以我们可以定义 bool 类型的:局部变量、全局变量、常量、指针、数组 ... ; C++ 对三目运算符也进行了升级,在 C 语言中的三目运算符返回的是变量值,不能作为左值使用;但在 C++ 中,三目运算符可直接返回变量本身,所以它即可作为右值使用,又可作为左值使用。注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。

        下来我们以代码为例进行分析

#include 

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;
    
    (a < b ? a : b) = 3;
    
    printf("a = %d, b = %d\n", a, b);   
    
    return 0;
}

        这段代码在 gcc 中肯定编译通不过因为三目运算符返回的是变量值,给常量赋值肯定出问题,那么在 g++ 中,它可以通过,返回的是变量本身,所以第 8 行相当于 a = 3。我们来看看编译结果

布尔类型及引用(三)

        我们看到 gcc 编译直接报错,但是 g++ 编译通过,并且成功的改变了 a 的值。在这块我们就不得不提变量名了,我们之前学过变量是一段实际连续存储空间的别名;程序中通过变量来申请并命名存储空间;通过变量的名字可以使用存储空间。我们再来想一个问题:一段连续的存储空间只能有一个别名吗?在 C++ 中新增了引用的概念。那么什么是引用呢?引用可以看作一个已定义变量的别名,它的语法格式是:TYpe& name = var;注意:普通引用在定义时必须同同类型的变量进行初始化。我们以代码为例进行分析

#include 

int main(int argc, char *argv[])
{
    int a = 3;
    int& b = a;
    
    b = 5;
    
    printf("a = %d\n", a); 
    printf("b = %d\n", b); 
    printf("&a = %p\n", &a);
    printf("&b = %p\n", &b);
    
    return 0;
}

        我们看到在第 6 行进行了 a 的引用,也就是说, b 为 a 的别名,改变 b 的值就相当于改变 a 的值啦。我们看看编译结果

布尔类型及引用(三)

        我们看到 a 和 b 都改为了 5,并且他俩的地址是一样的,也就证明了 b 是 a 的别名。那么回到之前的三目运算符的问题,当三目运算符的可能返回值都是变量时,返回的是变量引用;当三目运算符的可能返回值中有常量时,返回的是值。如下所示

布尔类型及引用(三)

        通过对布尔类型和引用的学习,总结如下:1、bool 类型是 C++ 新增加的基础类型,它的值只能是 true 和 false;2、C++ 中的三目运算符可作为左值使用;3、C++ 中的引用可以看作变量的别名来使用;4、三目运算符的可能返回都是变量时,返回的是引用。

        欢迎大家一起来学习 C++ 语言,可以加我QQ:243343083。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:布尔类型及引用(三)-创新互联
文章地址:http://azwzsj.com/article/csedoj.html