问题标签 [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 投票
2 回答
1878 浏览

c++ - reinterpret_cast 用于在接收端“序列化”数据、字节顺序和对齐

如果我们有一个 POD 结构说 A,我这样做:

如果接收端远程框不一定是相同的硬件或操作系统,我可以安全地执行此操作以“反序列化”:


“结果”会一直有效吗?C++ 标准规定 POD 结构,reinterpret_cast 的结果应该指向第一个成员,但这是否意味着实际的字节顺序也正确,即使接收端是不同的平台?

0 投票
1 回答
2609 浏览

c++ - 为什么在这里使用 static_cast 而不是 reinterpret_cast 很重要?

在 Raymond Chen 的一篇博文的回复中

一位提问者指出

Raymond,我认为 C++ 示例不正确,因为根据 ISO C++ 2003 标准(10-3,第 168 页)未指定派生类中基类子对象的位置,并且您假设基类子对象始终位于开始。C 示例在 C++ 中也可以,所以我会坚持使用它。

Raymond回复了

[代码没有做出这个假设。这就是为什么使用 static_cast 而不是 reinterpret_cast 很重要的原因。试试看:给 OVERLAPPED 添加一个虚拟方法(所以前面有一个 vtable)并观察编译器做了什么。-雷蒙德]

看了他的评论我就猜到了。在示例中使用 static_cast 很好,但 reinterpret_cast 不是。因为 reinterpret_cast 不是转换 vtable。我理解正确吗?
不过,如果我在那里使用 C-Style cast(不是 reinterpret_cast),它也会出错吗?

我重新阅读了更有效的 C++ 的演员解释来理解这一点。但对此没有任何答案。

0 投票
2 回答
188 浏览

c++ - 重新解释的指针未指向正确的内存位置

假设我在 Message.h 中得到了这个:

main.cpp中,我将m_bufferin Message 转换为Header类型。关键是我可以根据Header布局访问内存:

Header* hdr应该指向与 相同的内存地址,Message msg并且m_primitive应该与 位于相同的地址Header* hdr,并且m_transNum&m_primitive + 4

但是,这是实际值:

m_primitivem_transNum指向一个完全随机的位置并得到垃圾值!怎么会发生?reinterpret_cast应该通过转换为不同类型的指针来根据类类型更改布局。

另外,如果它返回一个副本,则 的值m_primitive应该是 100,并且m_transNum应该是 1,因为我memcpy进入char* contentmsg. 但价值观是错误的。

0 投票
2 回答
33 浏览

constants - 变化常数

请向我解释为什么我不能通过使用 next 来改变常量?

0 投票
1 回答
2093 浏览

c++ - 通过 C 强制转换访问结构的第一个字段是否违反了严格的别名?

这段代码是否违反了严格的别名?

更抽象地说,只要原始读/写操作类型正确,在不同类型之间进行强制转换是否合法?

0 投票
4 回答
469 浏览

c++ - 不相关类型之间的 reinterpret_cast 和 virtual

有人能解释一下为什么下面的代码有效吗,我已经在 Visual Studio .NET 2008、Cygwin 和ideone.com上的 g++ 上进行了测试。更重要的是我想知道它是否有效。请注意AB是不相关的类型。

编辑:在@leftaroundabout 的评论之后,我对我的代码进行了以下更改

程序输出消息:

基本上,无论调用什么,都会调用第一个虚拟方法。

0 投票
3 回答
45819 浏览

c++ - 为什么我不能在 char * 和 unsigned char * 之间进行静态转换?

显然编译器认为它们是不相关的类型,因此reinterpret_cast是必需的。为什么这是规则?

0 投票
2 回答
665 浏览

c++ - reinterpret_cast 和 STATUS_ACCESS_VIOLATION

在尝试使用 C++ 和reinterpret_cast函数时,我尝试将 a 转换short为 astring并得到一个 STATUS_ACCESS_VIOLATION 异常。

据我了解,尝试使用一块内存,该内存未分配给我的应用程序进程。

我怎样才能注意这种被禁止的内存访问的尝试?我怎样才能只重新解释这件作品,其中包含我的短期价值?

0 投票
2 回答
1824 浏览

c++ - 在启用 ARC 的情况下使用 reinterpret_cast

我在启用 ARC 的 Objective-C 项目中包含了一个库的头文件。

我知道该库不是在启用 ARC 的情况下编译的,但问题是库的头文件,特别是这些行:

我收到此错误:

是否可以修复此错误?

整个头文件可以在这里找到:http: //puu.sh/sTrH

0 投票
1 回答
500 浏览

c++ - 严格别名和 std::array 与 C 样式数组

当使用 gcc 4.7(在 OS X 上使用 MacPorts 构建的 g++-mp-4.7 (GCC) 4.7.0)编译以下代码时,我得到看似矛盾的结果。

当我尝试将 an 的一部分重新解释和取消引用std::array为 an时,编译器不会抱怨,uint32_t但在使用 C 样式数组时会抱怨。

示例代码:

编译命令是:

为什么他们会受到不同的对待?