问题标签 [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.
qt - Qt - 调用将自定义指针作为参数的插槽
我试图破解 Qt 的信号和槽,我遇到了一个问题,即 QMetaType::invokeMethod 不能正确地将指针参数传递给被调用的槽。
然后我这样称呼它:
哪里class MyObject : public QObject { ... }
。我也这样Q_DECLARE_METATYPE(MyObject *)
做qRegisterMetaType<MyObject *>("MyObject *")
0
发生的情况是接收器上的插槽正在被调用,但是无论我传递给call(...)
as什么,参数的值总是Q_ARG
出于好奇,我查看了接收器自动生成的 MOC 文件,发现插槽是使用以下代码调用的:
结果表明 的值_a[1]
具有 的正确地址MyObject *
。但reinterpret_cast
它变成了0
.
现在我有以下问题:
1) 如何以编程方式调用插槽并确保指针参数正确传递给插槽?2) 这是什么*reinterpret_cast< MyObject*(*)>(_a[1])
意思?额外的括号是什么(*)
意思,以及如何解释这段代码?
c++ - 处理低级字节操作时 reinterpret_cast 不好吗?
我正在编写一个 websocket 服务器,我必须处理需要取消屏蔽的屏蔽数据。
掩码是 unsigned char[4],数据也是 unsigned char* 缓冲区。
我不想逐字节异或,我更愿意一次异或 4 个字节。
在这种情况下使用 reinterpret_cast 有什么问题吗?
替代方案是以下代码,它不那么清晰且不那么快:
我对替代方案很感兴趣,包括依赖于 c++11 功能的替代方案。
c++ - 正在投射 std::pairconst& 到 std::pair常量&安全?
假设程序员没有故意做一些奇怪的事情,比如专业化,那么进入 areinterpret_cast
是否安全(理论上或实际上)?std::pair<T1, T2> const &
std::pair<T1 const, T2> const &
std::pair<T1 const, T2>
c++ - const_cast 与 reinterpret_cast
参考 SO C++ FAQ什么时候应该使用 static_cast、dynamic_cast 和 reinterpret_cast?.
const_cast 用于将 const 删除或添加到变量中,它是删除 const 的唯一可靠、已定义且合法的方法。reinterpret_cast 用于更改类型的解释。
我以合理的方式理解为什么 const 变量应该仅使用 const_cast 强制转换为非 const,但我无法找出使用 reinterpret_cast 而不是 const_cast 来添加 const 的合理理由。
我知道使用 reinterpret_cast 甚至添加 constness 是不理智的,但是使用 reinterpret_cast 添加 constness 会是 UB 还是潜在的定时炸弹?
我在这里感到困惑的原因是因为声明
很大程度上,您使用 reinterpret_cast 获得的唯一保证是,如果您将结果转换回原始类型,您将获得完全相同的值。
因此,如果我使用 reinterpret_cast 添加 constness 并且如果您将结果 reinterpret_cast 重新转换为原始类型,它应该返回原始类型并且不应该是 UB,但这违反了一个事实,即应该只使用 const_cast 来删除 constness
在单独的说明中,该标准保证您可以使用重新解释案例添加 Constness
5.2.10 Reinterpret cast (7) ......当“pointer to T1”类型的prvalue v转换为“pointer to cv T2”类型时,如果两个T1都为static_cast(static_cast(v))和 T2 是标准布局类型(3.9),T2 的对齐要求不比 T1 严格......
c++ - reinterpret_cast 到 QObject 的 subling
我有某种对象工厂(基于模板),这对我的目的非常有用。但是现在我尝试使用派生自 QObject 和纯抽象类(接口)的类,并且我遇到了奇怪的运行时错误。
这里是这个类的简单图(Derived)
及其在derived.cpp中的实现:
当我尝试将 void 指针强制转换为接口时,我会得到意想不到的(对我而言)行为,它可能是运行时错误,或其他方法调用(它取决于类的大小)。
你能解释一下为什么我不能将 void 指针转换为接口吗?有什么解决方法吗?
感谢您的回复
c++ - Pthread 和 void* 尝试取消引用泛型指针
当我调试我的 PRJ 时,我收到此错误:
args 错误:报告了多个错误。\ 无法执行 MI 命令:-var-create -
args 来自调试器后端的错误消息:尝试取消引用通用指针。\ 无法创建变量对象
从 void* args 转换为 Mapper* arg 时出现错误。
更新 1
KMaster、KMapper 分别实现了 Master、Mapper 但它们并没有添加任何相关的内容。有效的是调用方法的 KMapper work()
。这是代码:
希望有人能帮忙!
更新 2
调试器截图:
c++ - reinterpret_cast 时值发生变化
在使用 reinterpret_cast 将整数转换为浮点数时,内存的内容会发生变化。
例如,
变量值 nTempest 的十六进制表示为“42 a0 b6 ff”,但在 reinterpret_cast 之后,fDest 的内容为“42 a0 f6 ff”。
任何人都可以回答为什么第三个字节从 b6 变为 f6。
c++ - 为什么我不能将 uint 重新解释为 int?
这是我想要做的:
const int64_t randomIntNumber = reinterpret_cast<int64_t> (randomUintNumber);
其中 randomUintNumber 类型为uint64_t
。
错误是(MSVC 2010):
错误 C2440: 'reinterpret_cast' : 无法从 'const uint64_t' 转换为 'int64_t' 1> 转换是有效的标准转换,可以隐式执行或使用 static_cast、C 样式转换或函数样式转换
为什么不编译?两种类型都有相同的位长,这不是 reinterpret_cast 的用途吗?
c++ - reinterpret_cast - 奇怪的行为
我遇到了与 reinterpret_cast 相关的奇怪错误。只需看下面的代码:
VSC++2010 中的错误:错误 C2440:“reinterpret_cast”:无法从“int **”转换为“const void **”
gcc 4.1.2 中的错误:从类型“int**”到类型“const void**”的 reinterpret_cast 抛弃了 constness
gcc 4.6.2 中的错误:从类型“int**”到类型“const void**”的 reinterpret_cast 丢弃了限定符
有谁知道为什么编译器说我正在抛弃 const 。我和我的几个同事都不知道这是怎么回事。
感谢帮助!
c++ - 我可以使用 reinterpret_cast 将指向成员函数的指针转换为 char 数组并返回吗?
我有一些看起来像这样的代码:
在完整的上下文中,我可以确定set
始终使用与以下相同的类型get
。
这可以安全地重写使用reinterpret_cast
吗?
编辑:
这段代码和上面做的一样吗?