4_布尔类型和引用

关键词:bool类型、三目运算符、引用

1. C++中的布尔类型

C++在C语言的基本类型系统之上增加了bool类型,bool可取truefalse,理论上bool只占用一个字节
注意:true代表真值,编译器内部用1来表示;false代表非真值,编译器内部用0表示。

  • bool类型是C++中的基本数据类型,可以定义bool类型的全局变量,可以定义bool类型的常量,可以定义bool类型的指针,可以定义bool类型的数组,等等。

2. 三目运算符

在C语言中,三目运算符不能在赋值符号的左侧,如下:

#include

int main()
{
    int a = 1;
    int b = 2;

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

    return 0;
}
输出结果:
1.c: In function ‘main’:
1.c:8:21: error: lvalue required as left operand of assignment
     (a < b ? a : b) = 3;

在C++中,三目运算符能在赋值符号的左侧,如下:

#include

int main()
{
    int a = 1;
    int b = 2;

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

    return 0;
}
输出结果:
a = 3, b = 2

总结: C语言中的三目运算符返回的值是变量值——不能作为左值使用;
C++中的三目运算符可直接返回变量本身——即可作为右值使用,又可作为左值使用
注意:三目运算符可能返回的值中如果一个是常量值,则不能作为左值使用。

思考1:C++对三目运算符做了怎样的升级?对这种升级的意义是什么?

升级:当三目运算符所有返回都是变量时,返回的未变量本身。

3. C++中的引用

  • 变量名的回顾
    • 变量是一段实际连续存储空间的别名
    • 程序中通过变量来申请并命名存储空间
    • 通过变量的名字可以使用存储空间

问题: 一段连续的存储空间只能有一个别名吗?

  • 在C++中新增引用的概念
    • 引用可以看作一个已定义变量的别名
    • 引用的语法及实例:
//语法:
Type& name = var;


//实例:
int a = 4;
int& b = a;  // b为a的别名

b = 5;      // 操作b就是操作a
注意:普通引用在定义时必须用同类型的变量进行初始化。

引用的初体验

#include 

#define LOG_INT(i) printf("%s = %d\n", #i, i);
#define LOG_POINTER(p) printf("%s =%p\n", #p, p);

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

    b = 5;

    LOG_INT(a);
    LOG_INT(b);
    
    LOG_POINTER(&a);
    LOG_POINTER(&b);

    return 0;
}

输出结果:

a = 5
b = 5
&a =0xbfafffb8
&b =0xbfafffb8

总结: 在C++中,对同一段连续的存储空间(变量),可以起任意多个别名。

思考题1答案:C++对三目运算符做了什么?

  • 当三目运算符的可能返回都是变量时,返回的是变量的引用
  • 当三目运算符的可能返回中有常量时,返回的是值
int a = 1;
int b = 2;

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

4. 小结

  • bool类型是C++新增的基础类型
  • bool类型的值只能是truefalse
  • C++中的三目运算符可作为左值使用
  • C++中的引用可以作为变量的别名来使用
  • 三目运算符的可能返回都是变量时,返回的是引用

声明:此文章仅是本人在学习狄泰学院《C++深度解析教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
实验环境:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)

你可能感兴趣的:(4_布尔类型和引用)