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