美文网首页C++2.0
(void *)强制转换和static_cast的区别

(void *)强制转换和static_cast的区别

作者: Caiaolun | 来源:发表于2018-10-30 14:48 被阅读6次

前面的是C的风格,后面的是C++的风格(也是推荐使用的)。差别在于,static_cast更安全一些,对于指针操作的话,多了一些检查,例如无关指针就无法转换,父类指针向孩子指针,无法转换,常指针向非常指针无法转换,而前面的那个则是通吃,通常是下面四个转换的合体
reinterpret_cast
在低级编程以及硬件接口的开发过程中,常常需要将一个特定的物理内存地址赋值给一个指针。为此必须使用
reinterpret_cast操作符计算地址值。例子如下:

void *p;
// 将地址 0x5800FF 付给指针 p
p = reinterpret_cast< void* > (0x5800FF);

static_cast
通常这个运算符用来进行数值类型间的转化,比如int到float,也可以是自定义的某些数据类型的转化。这个操作符通常也可以用于类指针之间的转化,但是这个运算符在父类到子类的转化中没有做检查并不安全。
dynamic_cast
这个操作符专门用于指针或者引用操作,也可以进行point -> void 的操作。对父类和子类之间的指针装换这个操作具有类型检查的功能,比较安全!这里要注意的是,如果父类和子类之间没有虚函数(文档称为多态类),那么dynamic_cast不能执行转换,应采用static_cast来进行转换。

相关文章

  • (void *)强制转换和static_cast的区别

    前面的是C的风格,后面的是C++的风格(也是推荐使用的)。差别在于,static_cast更安全一些,对于指针操作...

  • C++ static_cast、const_cast、reint

    一. static_cast static_cast基于内容转换,相对安全。 1.普通用法 2.void* 转换 ...

  • C++类型转换

    四种转换的机制 : static_cast 强制类型转换 所有编译器隐式执行的转换都可以由static_cast来...

  • C++类型转换

    一、C风格的强制类型转换 eg: 二、C++风格的强制类型转换 const_cast ,static_cast ,...

  • C++11新特性(3)

    1.类型强制转换 static_cast,interpret_cast,const_cast和dynamic_ca...

  • C++中的类型转换

    C++中的类型转换 显示转换 命名的强制类型转换 static_cast dynamic_cast const_c...

  • C++ 强制类型转换

    static_cast,是一个强制类型转换操作符。编译器隐式执行的任何类型转换都可以由static_cast来完成...

  • static_cast/dynamic_cast/reinter

    static_cast 对类的指针只能转换有继承关系的类。对普通的指针来说只能在void*和其他指针之间转换。它还...

  • C++---CHAPTER 4: EXPRESSION

    类型转换 转换成常量: 强制类型转换的形式: static_cast:只要不包含低层const就可以使用stati...

  • 10 B 类型转换 友元函数

    /*四大类型转换1,static_cast< int >(100.5) 静态数据类型之间转化有类型指针和void...

网友评论

    本文标题:(void *)强制转换和static_cast的区别

    本文链接:https://www.haomeiwen.com/subject/xlegtqtx.html