当前位置:  开发笔记 > 编程语言 > 正文

在将void*转换为任何内容时,我应该使用static_cast还是reinterpret_cast

如何解决《在将void*转换为任何内容时,我应该使用static_cast还是reinterpret_cast》经验,为你挑选了2个好方法。

static_cast和reinterpret_cast似乎都可以很好地将void*转换为另一个指针类型.是否有充分理由支持其他人?



1> Konrad Rudol..:

使用static_cast:它是最精确的演员,它准确地描述了在这里进行的转换.

有一种误解,认为使用reinterpret_cast是一种更好的匹配,因为它意味着"完全忽略类型安全,只是从A转换为B".

但是,这实际上并没有描述a的效果reinterpret_cast.相反,reinterpret_cast它具有许多含义,因为所有这些含义都表明"由reinterpret_cast执行定义执行的映射."[5.2.10.3]

但是在特定情况下,从映射void*T*映射完全由标准定义; 即,在不改变其地址的情况下为无类型指针分配类型.

这是一个偏好的理由static_cast.

此外,并且可以说更重要的是,每次使用reinterpret_cast都是彻头彻尾的危险,因为它将任何东西转换为其他任何东西(指针),同时static_cast限制性更强,从而提供更好的保护.这已经让我免于我偶然试图将一个指针类型强制转换为另一个指针类型的错误.



2> Nick..:

这是一个棘手的问题.一方面,Konrad对reinterpret_cast的规范定义提出了一个很好的观点,尽管在实践中它可能做同样的事情.另一方面,如果你在指针类型之间进行转换(例如,当通过char*在内存中进行索引时相当常见),static_cast将生成编译器错误,并且无论如何你将被迫使用reinterpret_cast.

在实践中我使用reinterpret_cast,因为它更能描述强制转换操作的意图.您当然可以为不同的运算符设置一个仅指定指针重新解释的情况(保证返回相同的地址),但标准中没有一个.


"_different运算符只指定指针重新解释(保证返回相同的地址)_"拥抱?那个运算符**是**`reinterpret_cast`!
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有