C++学习笔记
天坑待填
正在C++ Primer配合CSAPP食用
命名
使用google标准
函数实现
尽量用默认参数列表
开始一定要参数校验
函数返回值返回是否能够信任
static保证变量生命周期
尽量使用局部变量
大量使用对常量的引用来传递参数
尽量返回常量引用实现封闭性
大量使用函数指针实现算法无关
大量使用模板实现类型无关
大量使用stl来解决问题
保证好一点的时间复杂度
可以使用尾置返回类型声明复杂指针
尾部可声明throw性质
使用function object中重载的括弧运算符
容器和函数的adaptor
lambda可以当作bind函数用
bind可以绑定某个函数的某些参数
fuction type
函数表
使用function object中重载的括弧运算符
lambda可以当作bind函数用
bind可以绑定某个函数的某些参数
类设计
可变成员加mutable可无视const
函数加const维持this的常量性质
类内初始值
委托构造函数
声明和定义
friend声明开放private的友元
explicit放在声明前抑制由单参数构造函数确定的隐式转换
static声明静态成员
赋值运算使用拷贝交换
面向对象设计
virtual关键字
定义类型和当前值的类型
继承overloading和overriding
父类子类
公有继承:is a
跨文件
预处理头文件保护
#ifndef 标志
#define 标志
定义类或者引用头文件
#endif
extern实现变量跨文件
类一般定义在头中文件并且文件名一般和类的名字一致
变量类型
指针*和引用符号&和变量名字和const位置从右到左阅读
auto和decltype()关键字自动识别类型
using ll=long long和typedef long long ll声明类型别名
const实现变量的底层和顶层常量性
static实现变量的生命周期的延长
constexpr才是真正的编译器求值的常数
nullptr是空指针
std::nothrow申请new
强制类型转换
double slope
= static_cast
常量变量转换
char *P =
const_cast<char*> (pc) ;
通用
dynamic_cast
右值引用T && something保证something即将被销毁因此可以转交内存
可以对字面值使用右值引用或者对临时结果使用
异常处理和调试
随时throw一个string
主函数中就try
主函数catch好string类型
用ifdef DEBUG调试
STL
vector
string
streaming file
一切变量的下标都用decltype定义
使用范围for语句来进行非修改的遍历,并且尽量使用对常量的引用
尽量使用stl和迭代器
迭代器访问过程不要向容器添加元素
可以直接列表初始化
back-inserter返回可插入位置的迭代器
关联容器
adaptor
IO
stream的iterator
stream
fstream
stringstream
内存机制
c++中的内存分5个区
new关键词做三件事 调用operator new申请free store内存 调用构造函数 类型转换
右值引用机制,最迟调用变量的分配
引用计数机制
善用new和delete,一定记得delete
因为delete会调用析构函数
智能指针shared-ptr<>= make-shared<>()
unique-ptr
判断字符类型的库
cctype
isalpha
isdigit
isupper
islower