C++

C++知识点笔记

Posted by szh on 2019-09-04

看一下 C++ Primer

第二章

对象在创建时获得特定的值称其被初始化,初始化与赋值不同
列表初始化 int i = {0}; int i{0} 若存在丢失信息风险,编译器将报错
未被初始化的函数体内部的内置类型变量值是未定义的,试图拷贝或以其他形式访问将引发错误
int *p,*&r = p r 是一个对指针 p 的引用
const 默认只在文件内有效,需要在多个文件中使用同一个 const 需要在每个文件中的声明或定义前加 extern
底层 const:const int *a表示不能通过 a 改变所指向对象的值,执行对象拷贝时,拷入和拷出的对象必须具有相同的底层 const 资格,或者两个对象数据类型必须能够转换
顶层 const:int *const a表示不能改变 a 指向的地址(必须初始化)
constexpr C++11 中可将变量声明为 constexpr 类型以便由编译器验证变量的值是否为一个常量表达式 constexpr int a = 10;
声明 constexpr 用到的类型称为字面值类型

第七章

= default 默认行为
Test(int a):A(a){}构造函数初始值列表,不在列表上的成员被默认初始化
友元:类允许其他类或函数访问它的非公有成员,友元在类定义内部声明,以friend开头,在类外需要对函数再进行一次声明,通常将友元与类本身放置于同一个头文件中
类的类型成员必须先定义后使用
可变数据成员 mutable int a永远不是 const,即使它是 const 对象的成员

之后先看了比较关键的内存管理,主要是智能指针和拷贝控制

第十二章

  • shared_ptr
  • unique_ptr
  • weak_ptr

第十三章

  • 拷贝构造函数
  • 拷贝赋值运算符
  • 右值引用
  • 移动构造函数和移动赋值运算符