- 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/
我有一个程序返回数字结果的数字(目前为 6 个),将它们转换为字符串,然后连接它们以通过 ZMQ 发送。 示例输出是: 结果:7.85、-5.75、16.0、0.0、0.84375、0.828125
动态编程 |集合 33(查找一个字符串是否与另外两个字符串交错) http://www.geeksforgeeks.org/check-whether-a-given-string-is-an-int
这个问题在这里已经有了答案: Which sort algorithm works best on mostly sorted data? [closed] (20 个答案) 关闭 8 年前。 我正
我正在用 C# 为聊天室编写一个机器人,我想检测一条消息是否包含太多大写字母。如果消息的大写字母总数超过消息总长度的 三分之一 并且总长度大于 13,则消息包含太多大写字母。这是为了防止较小的消息被标
我正在尝试在 Java 中使用线程池。但是线程的数量是未知的,所以我试图找到一个解决方案。然后出现两个问题: 一段时间以来,我一直在寻找增加线程池大小的方法,但我还没有想出办法。有什么建议吗?有人说
(在 Visual Studio 中使用 C++) 我有以下用于创建宇宙飞船对象的默认构造函数: Ship() // default constructor { name = "[ship u
对于类(class),我必须创建一个州对象的二叉树,每个州对象都包含一个常驻对象的二叉树,用于组织居住在每个州的人。我正在尝试按名称在整个州树中搜索一个人(州树和居民树都是按名称的字母顺序排列的),这
假设您有大量流行语言(Java、C、C++ 等)的源代码(如 50GB 以上)。 项目需求是: 压缩源代码以减少磁盘使用和磁盘 I/O 以无需解压整个文件即可从压缩源中提取特定源文件的方式对其进行索引
我想在我的代码中包含一个模式。单击按钮/href 时,模式中应显示不同的文件。我只是从 here 中获取了代码. 现在,在加载动画后(或几毫秒后)模态窗口就关闭了。奇怪的是,当你按下按钮几次时,它偶尔
我试图用 HREF 包装所有出现的 IP 地址,这样我就可以做一些事情了。 我已经通过几个验证器运行正则表达式本身,并且它与预期的模式匹配。因此,我认为我的问题在于实现,但我看不到正确的路径。有人可以
我正在尝试使用 Apache Tika 通过使用 ByteArrayInputStream 处理二进制文件来解析 pdf 文件...并且开始出现某些 pdf 文件的错误,并且对于某些 pdf 文件来说
格式为: 0 995 112 // there is an empty line here too 所以,我正在做: with open("in.txt") as f: articles =
给定一个线性递增的数组,但是 可能会遗漏一些数字 可能会有一些意想不到的数字, 您将如何构建算法以从数组中删除所有离群值? 可能的数组示例: 1,2,3,4,1,1,1,100,5,6,7 1,2,4
我想标记格式化字符串(非常类似于 printf),我想我只遗漏了一点点: %[number][one letter ctYymd] 应成为 token ² $1...$10 将成为代币 所有其他(普通
在我的一个项目中,我需要能够提供一个非常简单的变量查找和替换解析器(主要用于路径)。变量主要在启动期间使用,偶尔用于访问文件(不是程序的主要功能,只是加载资源),因此解析器不需要高性能。但是,我非常希
我目前正在重写一个电子商店 - 但仅限于客户端,即 CMS 大部分保持完好。我没有使用预构建的框架,因为系统必须保持与 CMS 的向后兼容性,而且我必须拥有完全自由的代码结构。 新系统完全基于 MVC
主要是头文件的文件结构(90% 的代码都是头文件)是否会减慢除了编译之外的任何事情? 有些人认为,在速度优化的情况下,它可能会导致大多数代码的内联,因此处理器会计算有关指令调用或类似内容的错误统计信息
想想 MUD/MUCK,但可能还有头像或现场插图。我选择的语言是 ruby。 我需要处理多个持久连接,数据在服务器和它的各种客户端之间异步传输。单个数据库必须根据客户端 session 中发生的事件保
场景:我试图在 git 下获取我的 unix 点文件。我必须(至少)在 cygwin 环境和一些标准的 linux 发行版(ubuntu 和 opensuse)之间工作,并且我有仅特定于 cygwin
我已经阅读了关于 the use of reinterpret_cast 的各种先前问题。 ,并且我还阅读了 C++ 标准中的相关措辞。本质上,它归结为指针到指针 reinterpret_cast 操
我是一名优秀的程序员,十分优秀!