C++深度解析 布尔类型bool,三目运算符,引用&(3)

C++深度解析 布尔类型bool 和 引用&(3)

 

 

 

布尔类型 bool

在C++中,bool类型只有true(非0)false(0)两个值,且bool类型只占用了一个字节。

true非0,编译器内部用1来表示。

false0 ,编译器内部用0表示。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = 0; //合法,兼容c语言特性,0代表false
       
    printf("b = %d\n", b);
    
    //bool类型支持数学运算
    b++;
    
    printf("b = %d\n", b);
    
    b = b - 3;
    
    printf("b = %d\n", b);
    
    return 0; 
}

结果如下:

分析:在C++中,遇到布尔类型bool时,将bool类型当成一个只占用1个字节的整形数

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    bool b = false; //0
    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;
}

结果如下:

 

 

 

三目运算符

三目运算符即可作为右值使用,又可作为左值使用。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    (a < b ? a : b) = 3;    // a = 3;
    
    printf("a = %d, b = %d\n", a, b);
    
    return 0;
}

结果如下:

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    (a < b ? a : 2) = 3;
    
    printf("a = %d, b = %d\n", a, b);
    
    return 0;
}

结果如下:

三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用

意义:如果三目运算符的返回都是变量的时候,返回的是变量的本身

 

 

 

引用

变量名的本质是存储空间的别名。

引用:已定义变量的别名

引用的语法:Type& name = var;

引用在定义时,必须初始化,且类型必须一致,初始化的值必须是变量,而非常量。

int a = 4;
int& b = a;    //b为a的别名
b = 5;         //操作b就是操作a,本质是将5赋值给a,a=5

注意:普通引用在定义时必须用相同类型的变量进行初始化。

示例程序一:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    int& b = a;
    
    b = 5;
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    //相同的地址,意味着a和b标识符代表内存同一段连续的空间
    printf("&a = %p\n", &a);
    printf("&b = %p\n", &b);
    
    return 0;
}

结果如下:

在C++,完全可以对同一段连续的内存,起任意多的别名。

示例程序二:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int a = 4;
    float& 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;
}

结果如下:

因为C++是强类型的语言。引用b的类型 必须和 变量a要一样。

 

 

 

C++中对三目运算符

当三目运算符的可能返回都是变量时,返回的是变量引用

当三目运算符的可能返回中有常量时,返回的是值

int a = 1;
int b = 2;

(a < b ? a : b) = 3;  //正确,返回a或b的引用,可作为左值
(a < b ? 1 : b) = 4;  //错误,返回1或b的值,不能作为左值

 

 

 

小结

bool类型是C++新增加的基础类型

bool类型的值只能是true(非0)false(0)

C++中的三目运算符可作为左值使用

C++中的引用可以看作变量的别名来使用

三目运算符的可能返回都是变量时,返回的是引用

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值