0.旧式转换
先看看旧式的强制类型转换(如,整数进行浮点除法时会把其中一个变量用旧式转换转为 double):
//type(expr) 函数形式的强制类型转换
int count1 = 10;
bool not_empty1 = bool(count1); //为true
//或者(type)expr C语言风格的强制类型转换
int count2 = 0;
bool not_empty2 = (bool)count2; //为false
根据所涉及的类型不同,旧式的强制类型转换分别具有与 const_cast、static_cast、reinterpret_cast 相似的行为。与命名的强制类型转换相比,旧式的强制类型转换出问题更不容易追踪。
除了旧式的转换,还有四种命名的强制类型转换:static_cast、const_cast、dynamic_cast 和 reinterpret_cast。
1.static_cast任何具有明确定义的类型转换,只要不包含底层const(形如const char *ptr,表示指针所指的对象是一个常量),都可以使用 static_cast。(C++ Primer Plus上说,只有两者其中一方可以隐式转换为另一方(如向上转型),转换才是合法的,否则会出错)
//进行强制类型转换以便执行浮点数除法
int a = 1, b = 2;
double result = static_cast(a) / b;
可以参照cpp在线手册的例子来理解他的应用场景:
#include
#include
struct B {
int m = 0;
void hello() const {
std::cout
关注
打赏