C++ 基础知识 (一)
1. const 可以提高效率, 编译器通常不为普通 const 常量分配存储空间, 而是将它们保存在符号表中, 这使它成为编译期间的一个常量, 存取不需要内存操作, 所以效率比较高
2. volatile 关键字. 用于多线程程序中, 一个定义为 volatile 的变量是说这个变量可能会被意想不到的改变, 这样编译器就不会去假设这个变量的值了. 使用 volatile 修饰的变量, 编译器不会对其进行优化, 每次读取时都会去内存中读
3. ASSERT() 断言. 用于 ASSERT(n != 0) 表示当 n == 0 时程序会退出,
4. int main(int argc, char** argv)
argc 是输入命令的条数, argv 存储命令
5. new/delete 和 malloc/free 的区别
5.1 都可以动态分配和回收空间
5.2 new 是类型安全的, int *p = new float[2] 是错误的, 但 malloc 检测不出
5.3 new 调用构造函数, delete 调用析构函数
5.4 malloc/free 需要库文件 stdlib.h 支持
6关键字 explicit 的作用. 明确指出禁止隐式转换.
7. strlen 和 sizeof
strlen("\0") -> 0
sizeof("\0") -> 2
8. 引用和指针的区别
8.1指针可以为空, 引用必须指向某个值
8.2 指针可以重新赋值, 引用不可以
8.3 指针和引用都可以用于面向对象的多态
8.4 指针使用前需要判断是否为空, 引用不需要
8.5 引用由指针实现
9. typedef 和 define 的区别
9.1 typedef 支持类型检查, 增加可读性
9.2 作用于不同, define 是全局的, typedef 有作用域
10. struct 和 union
typedef union {double i; int k[5], char c;} DATE
struct {int cat; DATE cow; double dog;} too;
int 4 自己, double 8 字节, union 也需要对齐, 所以 DATE 需要 24 字节
而 too 的大小也按 8 字节对齐, 所以 too 是 40 字节