问题标签 [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 回答
6154 浏览

c++ - 使用 C++ 样式转换从 Void* 转换为 TYPE*​​:static_cast 或 reinterpret_cast

因此,如果您从 Void* 转换为 Type* 或从 Type* 转换为 Void*,您应该使用:

或者

对我来说 static_cast 似乎更正确,但我已经看到两者都用于相同的目的。此外,转换的方向是否重要。即我是否仍应将 static_cast 用于:

我已经阅读了关于 C++ 风格转换的其他问题,但我仍然不确定这种情况的正确方法是什么(我认为它是 static_cast)

0 投票
6 回答
3306 浏览

c++ - C ++强制转换为较小大小的数组

这是一个关于 C++ 语言的各种怪癖的有趣问题。我有一对函数,它们应该用矩形的角填充点数组。它有两个重载:一个需要 a Point[5],另一个需要 a Point[4]。5 点版本指的是一个封闭的多边形,而 4 点版本是指您只需要 4 个角的时候。

显然这里有一些重复的工作,所以我希望能够使用 4 点版本来填充 5 点版本的前 4 点,所以我没有重复该代码。(并不是说复制太多,但每当我复制和粘贴代码时,我都会有可怕的过敏反应,我想避免这种情况。)

问题是,C++ 似乎并不关心将 a 转换T[m]T[n]where的想法n < mstatic_cast似乎认为这些类型由于某种原因不兼容。reinterpret_cast当然,它处理得很好,但它是一种危险的动物,作为一般规则,最好尽可能避免。

所以我的问题是:是否有一种类型安全的方法可以将一个大小的数组转换为数组类型相同的较小大小的数组?

[编辑] 代码,是的。我应该提到参数实际上是对数组的引用,而不仅仅是指针,因此编译器知道类型差异。

[Edit2] 通过引用传递数组的目的是让我们至少可以模糊地确定调用者正在传递正确的“输出参数”。

0 投票
2 回答
1614 浏览

c++ - C++ reinterpret_cast

我不知道为什么这个简单的代码不起作用:

有人可以告诉我为什么reinterpret_cast不起作用吗?

0 投票
4 回答
503 浏览

c++ - 关于 reinterpret_cast 的问题

我有以下代码

输出为:7648 请解释 reinterpret_cast

0 投票
7 回答
14740 浏览

c++ - reinterpret_cast 演员表成本

我的理解是 C++ reinterpret_cast 和 C 指针转换只是一个编译时功能,它根本没有性能成本。

这是真的?

0 投票
3 回答
571 浏览

c++ - 违反严格混叠规则的演员表

我有一个函数需要一个 unsigned long* 并且需要将它传递给一个采用 unsigned int* 的外部库,并且在这个平台上 unsigned int/long 的大小相同。

这会产生一个警告,说它违反了严格的别名规则。有解决办法吗?

谢谢

编辑:我很抱歉不清楚。该代码是一个原子更新,所以绕过库来存储它不是一种选择。我可以下到汇编,但我想在 C++ 中执行此操作。

0 投票
5 回答
538 浏览

c++ - 创建结构时修改的类私有成员 (C++)

我只是在浏览一些 C++ 代码。我在哪里遇到了reinterpret_cast运营商的概念。

编辑 1:

我知道不建议访问类的私有成员。 但在某些情况下,我们应该继续访问它们。 我刚刚提出这个问题是为了弄清楚我的概念。

在我提到的示例中,通过简单地创建具有相同变量的结构来访问 Class 的私有成员,然后通过实现 reinterpret_cast运算符进行修改。

我已经了解reinterpret_cast运算符的用法,因为我知道的作用,但我不明白如何使用结构来修改私有类成员的值。

以下是我提到的源代码:

班级:

用于访问和修改私有类成员的结构:

谢谢。如果我错了/我无法以适当的方式提出我的问题,请纠正我。

0 投票
1 回答
4238 浏览

c++ - winsock recv 给出 10014 错误

我将从代码开始:

现在,当我运行此代码时,ret 变为 -1,并且 WSAGetLastError() 返回 10014,这意味着指针错误。
但是我不明白为什么这不起作用?如果我注释掉 reinterpret_cast 行并使用它下面的行!
可以说 reinterpret_cast 是有风险的,但我认为应该没问题,因为 unsigned char 和 signed char 的大小完全相同。
据我所知,std::vectors 应该可以安全地直接在内存中寻址。

有趣的是,当我在 send() 中使用相同的向量类型做同样的事情时,它会起作用!发送功能:

正如我们所看到的,除了 CharBuf 在这种情况下是 const 之外没有任何区别,这能改变什么吗?

为什么 recv() 比 send() 更敏感?recv() 怎么能知道指针无效(显然不是)?它应该看到的只是一个 char 数组!

根据要求,我的整个接收功能(请记住,我无法拼出其中的每个功能,但我认为它们应该是不言自明的。

没关系。我在粘贴函数时发现了它。像往常一样,当你试图为别人解释它时,你会发现你的错误:) 我把它留给读者来找出问题所在,但我会给出 &pData[0] 作为提示。感谢您的帮助:D

0 投票
2 回答
681 浏览

c++ - C++ 中的简单存储类和严格的别名

我有以下代码用于存储一个小类。

gcc 4.4 警告我在storage::get()返回时违反了严格的别名规则。

AFAIK,我没有违反任何规则。我实际上违反了严格的别名还是 gcc 在这里变得很挑剔?

有没有办法在不禁用严格别名的情况下让它免费警告?

谢谢

编辑:

另一方面,以下实现没有给出任何警告:

编辑:

gcc 4.5 及更高版本不会发出警告 - 所以显然这只是对严格别名规则的误解或 gcc 4.4.x 中的错误

0 投票
3 回答
10536 浏览

c++ - 问题铸造 STL 复杂到 fftw_complex

FFTW 手册说它的类型与 STLfftw_complex中的类有点兼容。std::complex<double>但这对我不起作用:

这给了我一个错误:

我究竟做错了什么?