1. bool
布尔类型变量true表示1;但是把string(4字节)转化为bool(1字节),会截断,举个例子:
bool result = true;
print result;
(答案:1)
bool result = true;
result = 100;
print result;
(答案: 1,因为截断只保留1字节)
2. const
const定义时,常量必须初始化: const int a; (wrong) const int a = 100; (right)
const不能被更改,即不能重新被赋值, 举个例子:
const int a = 100;
a = 200; (错误,因为a是const,不能被更改)
const int *p; // const在*左边,表示指针所指向的变量是个const
p = &a;
*p = 200;(错误, 因为*p指向的a是个const,不能被更改)
int b = 5;
*p = 10;(错误,因为*p自己是个const,不能被更改)
int * const p2; // Error: p2为一个常量,常量定义的时候必须初始化。且初始化之后不能再重新指向了(因为它自己是个const),比如:
int * const p2 = b;
p2 = &a; // Error, 因为p2是个常量,常量不能被更改,即不能重新赋值
但*p2可以被重新赋值,因为它的类型是int (比如*p2=200, 正确)
3. 宏
高级编程:尽量用const替换#define,底层编程相反。
泛型编程本质:替换
4. 内存对齐
优点:性能考虑,对齐的数据上访问会很快(cpu访问效率提高)
如何对齐:略
5. new与delete
new: 创建堆空间(类似c malloc), 成功则返回首地址(else 直接抛出异常,因此一版失败,不进行NULL指针的判断!!!)
delete: 销毁堆上空间
delete数组如果不带中括号,那么销毁的空间是不确定的,例如:
new *p = new int; (new *p = new int(5) //初始化一个元素:5;但数组是没有办法初始化的,如需要,for循环语句初始化)
new *p2 = new int[10];
delete p;
delete [] p2;
new一个对象会做两件事情:step a.分配内存 step b. 调用构造函数