问题标签 [reinterpret-cast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
78122 浏览

c++ - Should I use static_cast or reinterpret_cast when casting a void* to whatever

Both static_cast and reinterpret_cast seem to work fine for casting void* to another pointer type. Is there a good reason to favor one over the other?

0 投票
11 回答
402181 浏览

c++ - 何时使用 reinterpret_cast?

我对reinterpret_castvs的适用性有点困惑static_cast。从我读过的内容来看,一般规则是在编译时可以解释类型时使用静态强制转换,因此使用static. 这也是 C++ 编译器在内部用于隐式转换的转换。

reinterpret_casts适用于两种场景:

  • 将整数类型转换为指针类型,反之亦然
  • 将一种指针类型转换为另一种。我得到的一般想法是这是不可移植的,应该避免。

我有点困惑的是我需要的一种用法,我从 C 调用 C++,并且 C 代码需要保留 C++ 对象,所以基本上它包含一个void*. 应该使用什么类型转换来在 thevoid *和 Class 类型之间进行转换?

我见过两者的用法static_castreinterpret_cast?虽然从我一直在阅读的内容来看,它似乎static更好,因为演员可以在编译时发生?虽然它说用于reinterpret_cast从一种指针类型转换为另一种?

0 投票
4 回答
253 浏览

c++ - 重新解释成员函数指针是一个“好主意”吗?

我有一个工作线程,它包含一个“线程操作”列表,并作为时间处理它们。

通常是这样称呼的

哪个工作得很好,直到

改为

遗憾的是,我们无法再次将其更改回来,因为其他内容需要新格式(并且重载不能仅因返回类型而异)。

我确实尝试过

这似乎工作得很好,但我不确定重新解释这样的函数指针是“定义”的行为,有人可以建议吗?

0 投票
8 回答
1518 浏览

c++ - C++:将整数转换为指针的安全方法

我需要将包含地址的整数类型转换为实际的指针类型。我可以使用 reinterpret_cast 如下:

但是,这不会执行任何运行时检查以查看所讨论的地址是否实际上包含 MyClass 对象。我想知道首先转换为 void*(使用 reinterpret_cast)然后在结果上使用 dynamic_cast 是否有任何好处。像这样:

使用第二种方法有什么好处吗?

0 投票
3 回答
6929 浏览

c++ - 通过 void* 进行投射,而不是使用 reinterpret_cast

我正在读一本书,我发现reinterpret_cast不应该直接使用它,而是将其转换为 void* 并结合static_cast

代替:

但是,我找不到解释为什么这比直接演员更好。如果有人能给我一个解释或指出我的答案,我将不胜感激。

提前致谢

ps 我知道是干什么reinterpret_cast用的,但我从来没见过这样用的

0 投票
6 回答
1911 浏览

c++ - 在 C++ 中使用 reinterpret_cast<> 的问题

我正在尝试将数据流转换为结构,因为数据流由固定宽度的消息组成,并且每条消息也具有完整定义的固定宽度字段。我计划创建一个结构,然后使用 reinterpret_cast 将指向数据流的指针转换为结构以获取字段。我做了一些测试代码并得到了奇怪的结果。任何人都可以解释为什么我得到这些或如何更正代码。(数据流将是二进制和字母数字混合但我只是用字符串测试)

即将出现的结果是

我认为四个,我们的和你的正在打印,因为它找不到空终止符。如何解决空终止符问题?

0 投票
11 回答
48434 浏览

c++ - 为什么这个 reinterpret_cast 不编译?

我知道这reinterpret_cast很危险,我这样做只是为了测试它。我有以下代码:

当我尝试编译程序时,它给了我一个错误说

从“float”类型到“double”类型的无效转换

这是怎么回事?我以为reinterpret_cast是你可以用来将苹果转换为潜艇的流氓演员,为什么这个简单的演员不能编译?

0 投票
5 回答
1028 浏览

c++ - 需要 C 风格、重新解释和 const 类型转换的说明

我是否正确假设 C 风格的演员表(不鼓励)只不过是 reinterpret_casts ?在寻找讨厌的演员表时,使用后者在视觉上很引人注目并且易于搜索,因此建议使用 C 风格的演员表?

如果使用 const_cast 丢弃 const 并写入最初的 const 对象是未定义的,那么 const_cast 的目的是什么?

注意:我知道 Bjarne 正确地谴责铸造操作是不安全的,甚至到了“丑陋的操作应该有丑陋的句法形式”的程度。因此在 C++ 中强制转换运算符的冗长。所以我会尽量减少它们的使用。承诺。:)

0 投票
3 回答
37194 浏览

c++ - 在没有 reinterpret_cast 的情况下将 unsigned char 转换为 std::string 的方法?

我在 std::string 中有一个我需要的 unsigned char 数组,但我目前的方式使用我想避免的 reinterpret_cast。有没有更清洁的方法来做到这一点?

0 投票
5 回答
823 浏览

c++ - 严格的指针别名:针对特定问题的任何解决方案?

我有一个由违反严格的指针别名规则引起的问题。我有一个T来自模板的类型和一些Int相同大小的整数类型(如sizeof)。我的代码基本上执行以下操作:

因为T是一些可以具有构造函数的任意(除了大小限制)类型,所以我不能将Tand合并Int。(这仅在 C++0x 中允许,甚至 GCC 还不支持)。

有什么办法可以重写上述伪代码以保留功能并避免破坏严格的别名规则?请注意,这是一个模板,我无法控制T; some_other_t赋值和随后的比较确实发生在模板代码中。

T(作为记录,如果包含任何位字段,上述代码在 GCC 4.5 上开始中断。)