C++转型操作符
C++转型操作符 F4 :
static_cast
const_cast
dynamic_cast
reinterpret_cast
这四个是C++标准中要求最好使用的四种转型操作符. 当然 原有C的那种 (type)expression 这样的写法 也是可行的. 但是这种写法应该彻底被放弃使用.
因为我们有牛逼的F4.
static_cast:
int num1;
int num2;
原有C转换方式
float a = (float)num1/num2;
现在
float a = static_cast
跟原C转换方式差不多....作用,影响.....
好吧,我确实不是很清楚这个的优劣势.
当然,这么写对于阅读更加容易理解.
const_cast
只用来移除表达式的常量性! 简单来说就是 将一个const修饰的常量转换成常量
举个栗子:
class animal{....};
animal cat;
const animal& dog = cat; //这里的dog代表的是cat的reference,并且dog为const
现在有个函数需要调用:
update(animal* obj);
错误的调用体位:
update(&dog);
正确的调用体位:
update(const_cast<animal*>(&dog)); //注意!这里传递进去的dog(即cat)在此函数中可被更改!
dynamic_cast
用于执行继承体系中: 安全的向下转型 或 跨系转型。
对于个人经常使用的地方就是,我们具体操作的是子类,而在用于接口传递的时候是使用父类(或称基类),这个时候就非常需要该转型符了。
该转型符在转型之后立马就能得知是否转换成功,详细说明:
从指向Base的pointer转换为derived的pointer,失败则返回null (这样的结果真是棒棒哒)
从指向Base的reference转换成derived的reference,失败则直接抛出exception ! (是不是棒棒哒)
注意:
- 该转型符无法应用于缺乏虚函数的类型上! (具体原因我也不知道。。哈哈哈)
- 如果你需要转换一个不涉及继承体制的请使用:static_cast
reinterpret_cast
用于转换“函数指针”
该操作符与编译平台息息相关,所以并不具有移植性!