int n3 = reinterpret_cast<int&>(f1); int n4 = reinterpret_cast<int&>(o1); 2. 指针【引用】之间互转。如:float*转成int*、CBase&转成int&、CBase*转成CBase2*、CBase&转成CBase2&等 float f1 = 1.0f; CBase1 o1; int* n1 = reinterpret_cast<int*>(&f1); int& n2 = reinterpret_cast...
也许是觉得语法不太优雅,c++98就有了reinterpret_cast,于是我们就可以 float a{1.f}; // 推荐花括号初始化,尽管c++98用不了 int b = reinterpret_cast<int&>(a); 可是reinterpret_cast并不会检查要重解释的类型的字节数是否一致啊之类的,还有大端小端的问题,一不小心就会ub(undefined behavior, 未定义行为)...
·reinterpret_cast 是特意用于底层的强制转型,导致实现依赖(implementation-dependent)(就是说,不可移植)的结果,例如,将一个指针转型为一个整数。这样的强制转型在底层代码以外应该极为罕见。
int *pi; char *pc = reinterpret_cast<char*>(pi); 1. 2. OK, 在这里你可以看到reinterpret_cast的强大作用,但是要注意的是,他并没有进行二进制的转换,pc指向的真实对象其实还是int的,不是char~ 对于reinterpret_cast运算符要谨慎使用,下面给出一些使用的地方: 参考IBM C++ A pointer to ...
static_cast:用于非多态的隐式类型转换,替代C中的转换操作。 const_cast:用于去除const修饰符,目的是去除指向常数对象的指针或引用的常量性,但不会改变变量的常量性。 reinterpret_cast:用于无关类型的转换,包括不同类型指针、引用之间以及指针和能容纳指针的整数类型之间的转换。转换时,会执行逐个比特复制的操作。
constchar*bp=reinterpret_cast<constchar*>(&command._instruction); for(inti=0;i<4;++i) out<<bp[i]; 四字节指令被重新解释为一组一字节字符,并打印到标准输出(笨拙,是的,但是这个决定不是我的)。 在我看来,为什么要交换这些位似乎并不合逻辑,因为char指针首先应指向最高有效位(在此x86系统上)。 例如...
int* pi = reinterpret_cast<int*>(pf);简而言之,static_cast<> 将尝试转换,举例来说,如float-到-integer,而reinterpret_cast<>简单改变编译器的意图重新考虑那个对象作为另一类型。 指针类型(Pointer Types) 指针转换有点复杂,我们将在本文的剩余部分使用下面的类: ...
reinterpret_cast <new_type> (expression) reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位。 什么是无关类型?我没有弄清楚,没有找到好的文档来说明类型之间到底都有些什么关系(除了类的继承以外)。后半句倒是看出了reinterpret_cast...
第二处使用reinterpret_cast是针对字符型数组。可以测试,这里如果不用格式转换符,输出结果是 F at Fish...
dynamic_cast:用于多态类型的转换,通常用于类层次结构中 reinterpret_cast:用于位模式的重新解释和重新编排 const_cast:用于修改类型的const或volatile属性 例如,使用显式类型转换将整数转换为浮点数:int a = 5;double b = static_cast<double>(a); // 显式类型转换:将int转换为double 五、类型转换的优先...