C++ 是一个难学易用的语言!难学一方面在于其广博,因此我选择用笔记的形式精简出一些有用的条款。
引用和指针
指针/引用的区别
引用是对象的地址;指针是对象,其对象的内容是地址。
从其惯用写法也可以发现其差别:
int& ri = 1; // ri 可以代表对象本身
int *pi = 1; // pi 需要运算符 * 来获取对象
引用相当于别名,其主要功能是传递函数参数和返回值。
引用的规则:
- 必须初始化(指针可任何时候被初始化)
- 不能有
NULL
引用(指针可指向NULL
) - 一旦被初始化,不能改变引用关系(指针可随时修改所指对象)
下面的代码会产生不确定的结果,因此一定避免这种写法。
char *pc = 0; // 设置指针为空值
char& rc = *pc; // 让引用指向空值
有时候如果程序运行过程中会出现类似的情况,即变量可能指向空值,那么变量应该声明为指针。
什么时候使用指针/引用更合适
如果存在以下两种情况:
- 存在不指向任何对象的可能
- 不同时刻指向不同对象
请使用指针。
若总是指向一个对象并且一旦指向某个对象后不会改变指向,那么使用引用更为合理。
其次,重载操作符时,也应该使用引用。
类型转换
四个操作符:
static_cast<type>(expression)
,在功能上与 C 风格的类型转换一样强大const_cast<type>(expression)
,转换掉对象的const
属性dynamic_cast<type>(expression)
,安全地沿着类的关系向下进行类型转换reinterpret_cast<type>(expression)
,可用于函数指针的类型转换
一般不建议代码里出现类型转换的语句,而且可以看到,C++ 类型转换的写法很不美观且键入麻烦。