第2章 变量和基本类型

  1. Ctrl + D:输入文件结束符

  2. unsigned u = -1 等价于 u = 2^32 - 1 = 4294967295

  3. 访问超出string空间大小,编译器也不会报错

  4. “对象”:一块能存储数据并具有某种类型的内存空间

  5. 初始化的赋值的区别:初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦出,而以一个新值来代替

  6. 变量能且只能被定义一次,但是可以被多次声明

  7. 引用必须被初始化,且只能绑定在对象上

  8. 为什么不能定义引用的引用?

    引用本身并不是一个独立的对象,它没有自己的内存地址,它是轻量的, 根据引用的本质,当尝试将一个引用作为另一个引用的目标时,实际上是在为同一个对象创建另一个引用,而不是创建一个指向引用的引用。

  9. 为什么不能定义指向引用的指针?

    因为引用不是对象,没有实际地址,所以不能定义指向引用的指针

  10. int *p = nullptrint *p = 0都是生成空指针

  11. 如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字

  12. 非常量引用不能指向常量对象


  1. const修饰指针:

    简记:看const*的相对位置

    • 如果是const * 指向可以变,指向的对象不能变
    • 如果是* const 指向的对象可以变,指向不能变

    顶层const:指针是常量,不能变

    底层const:指向的对象是常量,不能变

    声明引用的const都是底层const,

    当执行对象的拷贝操作是,拷入和拷出的对象必须具有相同的底层

    image-20240306093357398

    image-20240306093919524

    image-20240306094057678

  2. auto关键字一般会忽略掉顶层const,保留底层const;

1
2
3
4
5
6
7
8
int i = 42;
decltype((i)) d; // 错误:d 是int&,必须初始化
decltype(i) e; // 正确:e是一个(未初始化的)int
// decltype((v))的结果永远是引用

int *p = &r;
decltype(r) d; // d是int&
decltype(*p) d; // d是int&
  1. 预处理器:确保文件多次包含仍能安全工作

第3章 字符串、向量和数组

  1. 字符串字面值与string是不同的类型

    1
    2
    string s1;
    string s = "abc" + "def" + s1; // 是错误的
  2. 迭代器的有效:迭代器指向某个元素或者尾元素的下一位置

  3. 1

  4. 1

  5. 1