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

java - 这个 reinterpret_cast 是如何工作的?(将 C++ 移植到 Java)

我有一些 C++ 代码正在尝试移植到 Java,如下所示:

reinterpret_cast做什么?

0 投票
1 回答
29013 浏览

c++ - qobject_cast 是如何工作的?

我刚刚在 Qt 中找到了以下代码,我有点困惑这里发生了什么。

尤其是做什么reinterpret_cast<T>(0)

有人愿意解释吗?

0 投票
1 回答
4356 浏览

c++ - fstream 读写成员函数的正确转换

尽管关于 reinterpret_cast 的主题写了很多行,而且它有多糟糕,但我仍然对避免它的最佳方法感到困惑,尤其是在处理从 fstream 读取和写入之类的函数时。所以,这是我的困境......

假设我们有一个整数数组,我们想用文件中的一些数据填充它。

我们可以用几个不同的演员来阅读:

第一个(C 风格)已经过时,我们在 C++ 中引入了新的风格转换,这是有充分理由的。第二个是不可移植的,不提供任何保证。第三个写起来很乏味,破坏了乐趣。

有没有其他选择,我应该怎么做?

编辑:

目标是实现代码尽可能可移植和符合标准。

0 投票
3 回答
1143 浏览

c++ - C ++重新解释演员表?

我想将 PointsList 类的一个对象转换为另一个对象 Points3DList (反之亦然),其中:

Point 和 Point3D 之间没有关系(继承或组合)......

你怎么看转换

其中 pl3D 表示指向 Points3DList 对象的指针。在这种情况下可以使用 reinterpret_cast 还是创建转换函数更好?在这种情况下,数据模型无法更改...

0 投票
4 回答
1350 浏览

c++ - 有没有从 unsigned char* 转换为 char* 的好方法?

那些天我一直在阅读很多reinterpret_cast<>关于应该如何使用它的文章(并且在大多数情况下避免使用它)。

虽然我知道使用reinterpret_cast<>to cast from,say unsigned char*tochar*实现定义的(因此是不可移植的),但似乎没有其他方法可以有效地将一个转换为另一个。

假设我使用一个unsigned char*处理一些计算的库。在内部,我已经用它char*来存储我的数据(而且我无法更改它,因为如果我这样做会杀死小狗)。

我会做类似的事情:

如果我希望我的代码具有高度可移植性,我似乎别无选择,只能先复制我的数据。就像是:

当然,这是非常不理想的,我什至不确定它是否比第一个解决方案更便携。

所以问题是,在这种情况下你会怎么做才能拥有高度可移植的代码?

0 投票
5 回答
1984 浏览

c++ - 派生类的 C++ reinterpret_cast

父类:

派生类:

我想将 PointsList 类的一个对象转换为另一个对象 Points3DTopoList (反之亦然),其中:

允许这样的转换吗?

和反向转换?

每个 Point3Topo 的 Face 指针将被初始化为 NULL 还是未定义?

0 投票
2 回答
3258 浏览

c++ - reinterpret_cast

在《C++无所畏惧:让你感觉聪明的初学者指南》一书中,在第(8)章中,它提到了以下关于reinterpret_cast

....从一种指针类型 (int ) 转换为另一种 (char*)。因为转换改变了数据指向的解释方式,所以它被称为 reinterpret_cast,而不是 static_cast。*

你能在这里描述一下这一段吗?特别是操作命名方式的原因?

谢谢。

0 投票
4 回答
878 浏览

c++ - C++ reinterpret_cast

在运行这个程序时:

我得到以下输出:

4202656

这个数字代表什么?是内存地址吗?但是,内存地址是什么?“abc”不是作为字符数组存储在内存中吗?

谢谢。

0 投票
7 回答
7622 浏览

c++ - 当两个链接的 static_cast 可以完成它的工作时,为什么我们在 C++ 中有 reinterpret_cast?

假设我想投到A*char*反之亦然,我们有两个选择(我的意思是,我们中的许多人认为我们有两个选择,因为两者似乎都有效!因此混乱!):

两者都工作正常。

即使这样也能正常工作!

那么为什么我们reinterpret_cast在 C++ 中有两个链式 static_cast可以完成它的工作呢?

你们中的一些人可能会认为这个主题与之前的主题重复,例如本文底部列出的主题,但事实并非如此。这些主题仅在理论上进行讨论,但没有一个给出一个例子来说明为什么reintepret_cast真的需要,而且两个 static_cast肯定失败。我同意,一个 static_cast 会失败。但是两个呢?

如果两个链式的语法static_cast看起来很繁琐,那么我们可以编写一个函数模板,使其对程序员更友好:

然后我们可以使用它,如:

另外,请参阅这种any_cast可能有用的情况:Proper cast for fstream read and write member functions

所以我的问题基本上是,

  • 为什么我们有reinterpret_castC++?
  • 请给我看一个例子,两个链式 static_cast肯定不能做同样的工作?

0 投票
5 回答
5066 浏览

c++ - reinterpret_cast 大部分都没用吗?

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

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

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

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

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