美文网首页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的区别

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