C++ Primer 中文第五版笔记

C++ Primer

第2章 变量和基本类型

基本内置类型

变量

  • 对象:能存储数据并具有某种类型的内存空间

复合类型

引用 &d

  • 引用 = 起别名,&d的形式

  • 必须初始化,且必须是一个对象,不能是值,初始化后引用的对象不可更改

  • 类型匹配

指针 *d

  • 指针存放某个对象的地址,用&获取该地址

  • 当指针指向一个对象时,用解引用符*访问这个对象

  • 空指针(初始化)

    • int *p = nullptr;

    • int *p = 0;

  • 两个指针相同的可能

    • 都为空

    • 都指向同一个对象

    • 指向同一个对象的下一地址

    • 有可能相同的情况:一个指向同一个对象,另一个指向同一个对象的下一地址

  • void*指针

    • 可以存放任意类型对象的地址

指向指针的指针

  • *的个数区分指针的级别

    • **p表示指向指针的指针

    • ***p表示指向指针的指针的指针

指向指针的引用

  • int i = 42;
    int *p;//p是一个int型指针
    int *&r = p;//r是指针p的引用
    //理解r是什么?从右向左阅读r的定义,离变量名最近的符号&说明r是一个引用,*说明r引用的是一个指针

const限定符

初始化

  • 创建const对象必须初始化

  • const一般仅在文件内有效,如果想多文件共享const对象,定义之前应该加上extern关键字

    • extern const int bufSize = ;

引用常量

cosnt int ci = 1024;
const int &r1 = ci;//正确,引用是常量,引用的对象也是常量
int &r2 = ci;//错误,非常量引用指向一个常量对象

初始化和对const的引用

  • 引用常量的一个例外

    • 常量引用指向非常量

      • int i = 42;
        const int &r1 = i;//正确
        int &r2 = r1 * 2;//错误,非常量引用指向常量引用
  • 总结:非常量引用不能指向常量对象;不能通过常量引用修改指向非常量对象的值,但可以通过修改非常量对象的值修改

    • int i = 1;
      int &r1 = i;
      const int &r2 = i;
      r1 = 0;//正确
      r2 = 0;//错误,不能通过常量引用修改对象的值

指针和const

  • 指向常量对象的只能是常量指针,普通指针不可以

  • 一般指针的类型和所指对象的类型一致

顶层/底层const

  • 顶层const:指针本身是个常量

  • 底层const:指针指向的对象是个常量

  • 区分顶层还是底层

    • C++里 const int* 与 int const* 有什么区别? - 知乎

    • const默认作用于其左边的东西,否则作用于其右边的东西

constexpr

  • 认定变量是一个常量表达式,就声明为constexpr

类型别名

  • typedef double wages;

auto类型说明符

  • 必须有初始值

  • auto会忽视顶层const,保留底层const

decltype类型指示符

  • decltype(a) x = 0;//取a的类型为x赋予类型,x的初始值为0

自定义数据结构

编写头文件

预处理器

  • 头文件保护符

    • #define

    • #ifdef变量已定义时为真

    • #ifndef变量未定义时为真

    • 检查结果为真,则执行至#endif停止

你可能感兴趣的:(c++,笔记,算法)