常见错误40: 旧式强制类型转换----读书笔记《c++ gotchas》...
时间:2010-08-12 来源:lzueclipse
不要使用旧式强制类型转换。
它们的用法过于简单随意。
考虑这样的头文件:
//emp.h
//…
const Person *getNextEmployee();
//…
假设该头文件在整个工程中都被包含:
#include “emp.h”
//…
Person *victim = (Person *)getNextEmployee();
dealWith(victim);
//…
任何将常量性抹除的强制类型转换都有潜在的风险。
做一些修改:
//emp.h
//…
const Employee *getNextEmployee();
//…
上面那个强制转换仍然合法,但是我们最初的意思是仅仅去掉常量性,现在呢?而且我们不能保证
当头文件修改后,程序员会去查看所有调用getNextEmployee()的调用部分代码。
而若是使用新式强制类型转换,编译器就能发现这个错误:
#include “emp.h”
//…
Person *victim = const_cast<Person *> (getNextEmployee());
dealWith(victim);
const_cast的作用仅仅局限于去掉常量性。
相关阅读 更多 +