C++primer第二章变量和基本类型

第一章作为基础内容的介绍,这里就忽略不讲了

这个博客系列主要是阅读笔记,记录一些重点或者细节,不会事无巨细的记录,毕竟这本书太厚了

基本内置类型

建议:如何选择类型

事实上,大多数程序员能够(也应该)对数据类型的使用做出限定从而简化选择的过程,比如:

  • 当明确知晓数值不可能为负时,选用无符号类型
  • 使用int执行整数运算,如果数值范围超过了int,使用long long
  • 算术表达式中不用char bool
  • 浮点数运算用double
  • 字面值常量

    我们可以将整型字面值写作十进制数、八进制数或十六进制形式,用0x或者0X开头来表示十六进制,用0开头来代表八进制数

  • 转义序列

    | 含义 | 转义序列 |
    | ——— | ———— |
    | 换行符 | \v |
    | 制表符 | \t |
    | 回车符 | \r |

变量

  • 列表初始化

    1
    2
    3
    4
    5
    6
    7
    int units_sold = 0;

    int units_sold = {0};

    int units_sold{0};

    int units_sold(0);

    C++11的新特性,现在随时都可以用花括号即列表初始化为变量赋初值

    若列表初始化的初始值存在丢失信息的危险,则编译器会报错,如下所示

    long double id = 3.14;

    int a{id};

复合类型

  • 引用

    因为无法将引用重新绑定到另外一个对象,因此引用必须初始化

    引用并非对象,只是为一个已经存在的对象所起的另外一个名字

  • 指针

    1. 指针是一个对象,允许对指针赋值和拷贝
    2. 指针无须定义时赋初值,和其他内置类型一样,如果不初始化会拥有一个不确定的值

    关于int *p,这个只是修饰p而不是int,所以`int p1,p2`只有p1

const限定符

const对象一旦创建后其值不能被改变,所以const对象必须初始化

处理类型

  • 类型别名

    using SI = Sales_item;

  • auto

    auto定义的变量必须有初始值

自定义数据结构

注意类的定义最后要加上分号

  • 头文件

    头文件也经常用到其他头文件的功能

    比如一个类包含一个string成员,那么.h文件必须包含string.h头文件,同时.cpp文件需要操作string成员,所以也要包含string.h

  • 预处理器概述

    C++经常使用到的是头文件保护符,有效地防止重复包含的发生

    第一次包含.h文件的时候,#ifndef 检查结果为真,预处理器一直执行后面的操作直到遇到#endif

    后面再碰到这个.h文件将忽略中间的部分

    即使该头文件还没有被包含到其他头文件中,也应该设置保护符,只需要习惯性加上就可以了,没必要考虑程序到底需不需要