天坑待填

正在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 (j) / i;

常量变量转换

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