gpt4 book ai didi

c++ - reinterpret_cast moSTLy 没用吗?

转载 作者:IT老高 更新时间:2023-10-28 22:20:14 36 4
gpt4 key购买 nike

我已经阅读了关于 the use of reinterpret_cast 的各种先前问题。 ,并且我还阅读了 C++ 标准中的相关措辞。本质上,它归结为指针到指针 reinterpret_cast 操作的结果不能安全地用于任何东西,除了被转换回原始指针类型。

然而,在实践中,reinterpret_cast 的大多数实际使用似乎是基于(错误的)假设,即 reinterpret_cast 与 C 风格相同 throw 。例如,我看到很多代码使用 reinterpret_castchar* 转换为 unsigned char* 以进行字符集转换例行公事。这是完全无害的,但严格来说它不是可移植的 - 不能保证从 char*unsigned char*reinterpret_cast 不会崩溃当您尝试取消引用 unsigned char* 指针时,您的程序。

似乎唯一 reinterpret_cast 的其他真正用途是根据标准从指针转换为整数,反之亦然。

然而在很多情况下,我们想要(并且应该能够)安全地在不同的指针类型之间进行转换。例如: uint16_t* 指向新的 C++0x char16_t*,或者实际上是指向与原始类型具有相同大小/对齐方式的基本数据类型的任何指针。然而 reinterpret_cast 不保证这应该有效。

问题:我们怎样才能安全地在指向相同大小/对齐的基本数据类型的指针之间进行转换,例如 char* --> unsigned char *?由于 reinterpret_cast 似乎并不能保证这确实有效,C 风格的强制转换是这里唯一安全的选择吗?

最佳答案

there's no guarantee that a reinterpret_cast from char* to unsigned char* won't crash your program when you try to dereference the unsigned char* pointer.

您无法以任何其他方式进行此类转换,因此您必须相信您的编译器对这种完全合理的转换所做的工作。

Since reinterpret_cast doesn't seem to guarantee this actually works, are C-style casts the only safe option here?

C 风格的转换只会映射到 reinterpret_cast,所以它是完全相同的。在某些时候,您必须信任您的编译器。该标准有一个限制,它只是说“不。阅读你的编译器手册”。当涉及到交叉转换指针时,这是一个重点。它允许您使用 unsigned char 左值读取 char。无法将 char* 转换为可用的 unsigned char* 来执行此操作的编译器几乎无法使用,因此不存在。

关于c++ - reinterpret_cast moSTLy 没用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057614/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com