CPlusPlus - jwyx/ForFun GitHub Wiki

C++ 薄弱点

库函数不熟
智能指针不熟
异常处理不熟
多线程不熟
多进程不熟
IO不熟
网络不熟
模版机制不熟
C++书写规范不熟

C++ 注意点

bool: one byte; true/false
float: 保证6位有效数字
浮点常数: 默认是double
sizeof(数组名): 整个数组 字节 数
不能用sizeof操作符来确定动态分配的数组包含的字节数
数组部分初始化: 其他均为 0
允许省略struct
enum -> int, but int 不能转化为 enum
int *p1, *p2; // 正确的指针声明
int *p1, p2; // p2为int型
指针不等于整型
delete: 对NULL是安全的,不能释放已经释放的
new[]/delete[], new/delete
c和c++内部都是使用指针来处理数组,指针可以作为数组名,a[i] = *(a+i)
数组名是常数,sizeof不同(数组和指针)

运算符优先级:
    ++i, --i, *: 优先级相同,从右到左
    i++, i--: 优先级高于前缀版本,从左到右
EOF: 文件结尾 = Ctrl+D, 常为-1
const int* p = &age: 对p而言,age是常量;但其本身是变量

C/C++ 概念

Visibility
    global, file, function
Storage
    stack, heap, .BSS(uninitialized data), data(initialized data), code, file

Memory leak: 被分配的内存无法再使用

// credit: http://blog.csdn.net/steven30832/article/details/8267262
Memory management:
              | what?                     | where? | 生命周期    |
    Automatic | local variable            | stack  | 函数生存周期 |
    Static    | static or global variable | static | 整个程序周期 |
    Dynamic   | new / malloc              | heap   | 整个程序周期 |

Inline: 代码复制到函数调用区
    声明和定义前加 inline
    不能过大或递归
    compiler不一定实现
    一般省略原型,在原型处直接定义

引用变量: 已定义变量的别名
    必须在声明引用时将其初始化
    之后不能修改

左值:
    可以被引用的数据对象
    e.g. 变量,数组元素,结构成员,引用,dereferenced pointer

形参: [formal parameter]
    若不想修改数据,可添加const
    如下两种情况会创建 临时变量:
        1. 实参[actual parameter]类型正确,但不是左值
        2. 实参类型不正确,但是可以转化为正确类型

命名空间[namespace]:
    
封装[encapsulation]:
    private
    protected
    public

继承[inheritance]:
    使特性从一个类传递给另一类的语言特性
    基类引用可以指向派生类对象,无需进行强制类型转换

多态[polymorphism]:
    函数重载[function overload]:
        函数同名,但是不同function signature
        function signature: 参数数目和类型,参数排列顺序;不包括返回类型!
        类引用和类本身 视为 同一特征
        const和非const 视为 不同特征
    操作符重载[operator overload]:
        c++操作数的数目 和 类型来决定采用哪种操作

友元[friend]:
    friend只用于类定义的方法原型中; 不用于方法定义; 
    类:
    函数:
    成员函数:

初始化成员列表[member initialization list]:

构造函数[constructor]:

析构函数[destructor]:

复制构造函数[copy constructor]:

赋值操作符[assign operator]:

虚函数[virtual function]:
    virtual只用于类定义的方法原型中; 不用于方法定义;
    virtual function table

纯虚函数[pure virtual function]:
    提供未实现的函数,函数声明结尾处为 =0;
    可定义,可不定义;
    
抽象基类[Abstract base class]:
    not instantiate
    必须包含至少一个纯虚函数

静/动态联编[static/dynamic binding]:

虚基类[virtual base class]:
    multiple inheritance中只保留一份基类的拷贝

类型转换:
    dynamic_cast
    const_cast
    static_cast
    reinterpret_cast

异常[exception]:
    机制:
        throw 引发异常
        catch 捕获有处理的异常
        try   包含正常代码

运行阶段类型识别[RTTI/ Runtime Type Identification]:
    
模版[template]:

STL

C/C++ lib

strlen(): 返回字符串长度,不包含'\0'
string vs. char *:
    =      vs. strcpy
    +      vs. strcat
    +=     vs. strcat
    size() vs. strlen