- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我已经阅读了关于 the use of reinterpret_cast
的各种先前问题。 ,并且我还阅读了 C++ 标准中的相关措辞。本质上,它归结为指针到指针 reinterpret_cast
操作的结果不能安全地用于任何东西,除了被转换回原始指针类型。
然而,在实践中,reinterpret_cast
的大多数实际使用似乎是基于(错误的)假设,即 reinterpret_cast
与 C 风格相同 throw 。例如,我看到很多代码使用 reinterpret_cast
将 char*
转换为 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/
我的正则表达式没有正确执行。 当我改变它的位置时,我得到不同的结果。 “bbbWindows”不是我想要的。为什么不是“bbb2222”? 'Windowsbbb'.replace(/Windows(
我正在努力理解这个概念,但我真的看不出它有什么用,所以我假设我没有捕获要点。 例如- 此正则表达式 /([0-9]+)(?:st|nd|rd|th)?/ 将匹配带有或不带“st”、“rd”等的数字。后
我在背景上下文中使用 Core Data 有一段时间了,想知道为什么每个人都建议使用 NSManagedObjectContextDidSaveNotification 从后台合并到主上下文。我创建了
我正在尝试上传数据库中的图片,但是当我检查它是否已上传时,该字段为空。我还想限制上传文件类型格式jpeg、png 和gif。请帮忙 HTML PHP 0) { $
我希望能够了解 SMS 或通话记录中的特定项目何时更改。当适当的内容提供者发生某些变化时,很容易收到通知,但是获取特定记录是完全低效的,因为需要维护商店的完整镜像,然后找出差异。这不仅是蹩脚的。有用的
我无法将 ScrollView 添加到我的布局中。我该怎么办? 错误说:在此行找到多个注释: - 这个 ScrollView View 是无用的(没有 child ,没有背景,没有 id,没有样式)
引自 C++11 标准: 19.5.1.5 Error category objects [syserr.errcat.objects] const error_category& system_c
我最近尝试使用多处理模块(和它是工作池)。我在这里阅读了一些关于多线程(与标准的非线程版本相比,它减慢了整个过程)和多处理的讨论,但我找不到一个(可能非常简单的)问题的答案: 你能用多处理加速 url
IBindingList 的 ListChanged 事件在删除项目时触发类型 ListChangedType.ItemDeleted,可能是用户删除绑定(bind)到列表的数据网格控件中的一行。
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
据我了解,如果未找到所请求的 Atom,FindAtom 将返回 0。但即使在这个小代码中,根本没有任何 AddAtom,它似乎总是返回一些东西。这是为什么?这不会让带有 Ints 的 FindAto
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
在 Windows 7 上,查看文件 c:\windows\winsxs...\weather.js 有一个函数computeSunRiseSunSet(Latitude, Longitude, Ti
我想为我的应用程序使用辅助方法 isLowRamDevice,它可以流式传输视频。由于我支持 API 级别 15 以下的设备,因此我不得不使用 ActivityManagerCompat.isLowR
我遇到嵌套布局问题并抛出一些异常。错误是“此 LinearLayout 布局或其 LinearLayout 父级无用......”。我知道我可以通过此设置忽略此警告。 设置:Build Path->C
我购买了很多(500 多台)带有 AllWinner 处理器和 Android 4.0.3 的廉价中国平板电脑。所有平板电脑都公开相同的序列号。我无法使用 ADB.EXE 在多个设备(带有 USB 集
当我将 RecyclerView 与 LinearLayoutManager 一起使用时,它将方向设置为水平,然后将适配器设置为 RecyclerView。同时,我将RecyclerView的可见性设
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
这是 contain from 方法,它写入隐藏的字母。当我按下退格键时,我需要以某种方式从控制台中删除 char *。 private static string Password()
来自 mscorlib.dll: public interface IList : ICollection, IEnumerable, IEnumerable {..} public class Li
我是一名优秀的程序员,十分优秀!