C++中存在显示转换和隐式转换,所谓隐式转换即是比如int和float相加时,int会自动转换成float,此外还有显示转换,共有四种转换方法, static_cast, const_cast, dynamic_cast, reinterpret_cast
隐式转换一般都是比较安全的,而且C中的类型转换一般通过()来实现,C++之所以将它们变成四个关键字有以下两个原因,
- 程序中存在大量的(),这给一些文本检索工具,如grep制造了很大的困难。
- 隐式转换虽然比较安全,但是C++希望提高程序员的风险意识,让他们知道自己做的操作的风险。
关键字 | 说明 |
static_cast | 用于良性转换,一般不会导致意外发生,风险很低。 |
const_cast | 用于 const 与非 const、volatile 与非 volatile 之间的转换。 |
reinterpret_cast | 高度危险的转换,这种转换仅仅是对二进制位的重新解释,不会借助已有的转换规则对数据进行调整,但是可以实现最灵活的 C++ 类型转换。 |
dynamic_cast | 借助 RTTI,用于类型安全的向下转型(Downcasting)。 |
一般的调用格式为
xxx_cast<newType>(data)
C语言里面,double转int有如下写法
double scores = 95.5;
int n = (int)scores;
C++里,如果使用static_cast,可以写成如下形式
double scores = 95.5;
int n = static_cast<int>(scores);
个人理解:作为一个大型项目来说,机器自动帮你完成的判断越多,当出现问题时,你Debug的难度也就越大。因此,如果程序中的每一处逻辑,每一块内存,如果都能够掌握在程序员的手中,虽然可能为此付出的effort会大大增加,但是对于一个软件工程项目的健壮性来说,将是百无一害的。