可以转,可以通过编译,可以运行成功,但访问子类部分是乱码 (static_cast) 可以转,可以通过编译,但是运行会失败 (dynamic_cast) 另:可以使用static_cast将一个左值转换为右值引用(c++ primer P612) 对于含有虚函数的父子类(多态基类)之间的转换,一定要用dynamic_cast(如果用dynamic_cast进行没有虚函数的父子类之间的...
不过,与static_cast不同,在后一种情况里 (注:即隐式转 换的相反过程),dynamic_cast会检查操作是否有效。也就是说,它会检查转换是否会返回一个被请求的有 效的完整对象。 注意:dynamic_cast不能转换掉expression的const、volitale或者__unaligned属性。 3) reinterpret_cast 用法:reinterpret_cast <typeid>(express...
二、const_cast:解除常量属性,使其可以修改 int main(void) { const int a = 3; const int* p = &a; cout << *p << endl; //a = 4; //编译出错 //*p = 5; //编译出错 int* p1 = const_cast<int*>(p); *p1 = 5; cout << *p << endl; return 0; } 1. 2. 3. 4. 5. 6...
C++风格: static_cast、dynamic_cast、reinterpret_cast、和const_cast.. 关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast...
static_cast和reinterpret_cast的区别主要在于多重继承,比如: classA{public:intm_a;};classB{public:intm_b;};classC:publicA,publicB{};C c;printf("%p, %p, %p",&c,reinterpret_cast<B*>(&c),static_cast<B*>(&c)); 前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为sta...
一. static_cast static_cast基于内容转换,相对安全。 1.普通用法 2.void* 转换 任何指针都能隐式转换为void*,然而,要对void*指向的...
5. 重点-深入理解下reinterpret_cast的转换原理? 在C++编程中,类型转换是一项基础而强大的特性,允许开发者在不同数据类型间转换和操作数据。本文将详细分析C++的四种类型转换:static_cast、reinterpret_cast、dynamic_cast 和 const_cast。通过精心设计的示例和深入讲解。
const_cast和static_castStatic_cast可以对对象也可以对指针也可以对引用,但是const_cast只可以对指针和引用使用,后者不可以对对象用,如果你要把一个const值转化为非const值只能用隐式执行或通过使用static_cast、C样式转换或函数样式转换执行。比如:constintaa=10;//intbb=const_castint(aa);错误intbb=int(aa)...
const用于说明变量或成员函数的常量属性 而后两个关键字是类型强制转换。