const_cast 用于去除指针变量的常属性,将它转换为一个对应指针类型的普通变量,反过来也可以将一个非常量指针转换为一个常量指针变量 static_cast 用于转换基本类型和具有继承关系的类新之间转换,不太用于指针类型的之间的转换 dynamic_cast 只能在继承类对象的指针之间或引用之间进行类型转换 以上只有dynamic_cast这种转换...
int* p1 = const_cast<int*>(p); *p1 = 5; cout << *p << endl; return 0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 三、reinterpret_cast:可以将一个类型的指针转换为其它任意类型的指针,也可以用在指针和整形数据之间的转换 它是很危险的,如果我们没有使用它的充分理由,那么就...
输出结果是:Null pointer on second type-cast 两个dynamic_cast都是下行转换,第一个转换是安全的,因为指向对象的本质是子类,转换的结果使子类指针指向子类,天经地义;第二个转换是不安全的,因为指向对象的本质是父类,“指鹿为马”或指向不存在的空间很可能发生! reinterpret_cast (expression) 重解释转换 这个转...
static_cast 在编译时使用类型信息执行转换,在转换执行必要的检测(诸如指针越界计算, 类型检查). 其操作数相对是安全的。 另一方面;reinterpret_cast是C++里的强制类型转换符,操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。 例子如下: intn=9;doubled=static_cast <double>...
reinterpret_cast则可以用于将任何类型的指针或引用转换为任何其他类型的指针或引用,这在某些底层编程或与非C++库交互时非常有用。例如,可以将一个int指针转换为char指针。使用reinterpret_cast时,编译器不会检查转换的正确性,它只是简单地重新解释指针的位模式。因此,这种类型的转换需要谨慎使用,以避免...
operator char*() const { return data;//当从其他类型转换到char*时自动调用 } private: char* data; }; 避免隐式类型转换的方法:在单参数的构造函数或N个参数中有N-1个是默认参数的构造函数声明之前加上explicit。 C风格显式转换(C style explicit conversion) ...
const_cast<类型说明符>(表达式) reinterpret_cast<类型说明符>(表达式) 下面在比较它们的异同时,按照适用范围从窄到宽的顺序介绍,先从使用频率比较低的reinterpret_cast开始,然后依次是const_cast,dynamic_cast,最后介绍static_cast。 reinterpret_cast 首先从英文字面的意思理解,interpret是“解释,诠释”的意思,加上前...
static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换,例如non-const对象转为const对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:
因为从安全性上说,不同的转型(cast)有很大的区别,所以 C++ 引入了四种不同的具名转型(named cast...
3 reinterpret_cast可以将指针类型转换为int类型,如下图,定义了一个char *类型,然后强制转换为int (注意编译时添加#include <iomanip>头文件)4 通过点击运行查看结果,整数类型的变量和指针变量的值是一样的 5 同样的可以将整型变量重新转换为指针变量类型 6 运行结果可以得出,整型变量转换过来的指针类型,成功...