问题标签 [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.
c++ - 我应该在 C 风格的演员表上使用 C++ reinterpret_cast 吗?
我有以下模板函数,用于将任何标准类型的数据转储到二进制输出流中。
除了 reinterpret_cast,我还可以使用 C 风格(const char*)。使用 reinterpret_cast 有什么特别的理由吗?我阅读了其他一些不赞成 reinterpret_cast 的帖子。但是上面的用法是合法的,不能用其他东西代替,对吧?
c++ - 使用重新解释指向整数的指针
我正在尝试使用 reinterpret_cast 将指针转换为另一种类型
例如,如果我将指向 MyClassA 的指针转换为 MyClassB,使用 reinterpret_cast 这种转换会起作用吗?代码可移植性如何?
而且,正如我所指出的:
(5.2.10/4) 指针可以显式转换为任何大到足以容纳它的整数类型。
这是否意味着任何指针例如MyClassA*
只能转换为 int* 指针?如果我是对的?
c++ - 重新解释强制转换行为的 GCC 实现
我怎么知道重新解释转换如何在 GCC 编译器上工作?文档中提到了吗?如果存在,我可以知道任何参考或链接吗?
c++ - 将指向函数的指针转换为指向函数类型的不同指针的结果
(5.2.10/6) C++03 指向函数的指针可以显式转换为指向不同类型函数的指针。通过指向与函数定义中使用的类型不同的函数类型(8.3.5)的指针调用函数的效果是未定义的。除了将“指向 T1 的指针”类型的右值转换为“指向 T2 的指针”类型(其中 T1 和 T2 是函数类型)并返回其原始类型会产生原始指针值之外,这种指针转换的结果是未指定的. [注意:有关指针转换的更多详细信息,另请参见 4.10。]
以下是我正在尝试做的事情,虽然很明显转换fp1
为的结果fp2
会产生一个原始指针,但同时标准中的措辞是"The result of such a pointer conversion is unspecified"
什么意思?
c++ - char* 转换和别名规则
根据严格的别名规则:
Achar*
对任何不同类型的对象都是有效的。但现在的问题是,它会指向 &d 的同一个地址吗?C++ 标准对返回相同地址的保证是什么?
c++ - 多重继承和this指针
假设我有这个结构:
operator[] 应该按预期工作,因为 vector_data 是 POD 类型。预期的行为是 vector_data[0] 返回 x,vector_data[1] 返回 y。
现在假设我有第二个结构:
并从两者中得出:
这会破坏 operator[] 的预期行为吗?换句话说,派生结构体中vector_data的this指针是否仍然指向结构体的vector_data部分,还是会指向派生结构体的开头?
如果它确实破坏了 operator[],那么我该如何解决这个问题?我可以先从 vector_data 继承,但假设组合包含虚函数。我知道大多数编译器将 vtable 放在最后,但这不能保证。最好的方法是什么?
c++ - 我怎样才能摆脱这个 reinterpret_cast,或者这种用法可以吗?
我有一个带有这个签名的模板成员函数:
可以使用指向接受类型参数的函数的指针来调用它T*
。context
传递给该函数。实现是这样的:
它使用reinterpret_cast<>
并且有效。问题是标准没有很好地定义它,而且非常危险。我怎样才能摆脱这个?我试过static_cast
了,但这给了我一个编译器错误:
static_cast
fromvoid (*)(std::__1::basic_string<char> *)
todispatch_function_t
(akavoid (*)(void *)
) 是不允许的。
dispatch_function_t
是 C 类型,与void (*)(void*)
.
我不确定我是否足够清楚。它的作用是dispatch_sync_f
调用给定的回调函数并将给定的上下文参数传递给该回调函数。(它在另一个线程上执行此操作,尽管这超出了此问题的范围。)
c++ - 为对象 ID 选择随机数?
我正在实现一个引用计数基类,并希望为每个正在创建的继承该接口的对象设置唯一编号。
这是该类的代码片段:
标题:
共产党:
我很怀疑这是否安全,如果不是,为什么不呢?由于两个原因,我没有使用 rand 和 srand 函数:
- srand AFAIK 最好在项目中仅使用一次以使随机数尽可能随机。
- 这种方法更精确,因为两个对象不能共享相同的内存位置。
请给我建议。
编辑:在什么时候创建成员 object_id?在构造函数内部或外部(在初始化列表之前或之后)嗯嗯?多谢!
c++ - reinterpret_cast on char 和 unsigned char 之间的指针陷阱?
我正在使用以下函数来创建 UUID 并将其以人类可读的形式写入预分配的缓冲区。出了点问题。
在方法结束时,调试器说:
- lDest = 0x01fe4fd8 "df4a5ed8-c0d2-495a-84d7-ce0e07cf2113"
- PDST = 0x0012EC7C“ìììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììììì”
我以为两者都有相同的内容,但事实并非如此。
发生了什么?谢谢。
c++ - c++ reinterpret_cast、virtual 和 templates 好吗?
在 C++ 中,假设以下类层次结构:
进一步假设这两个类的工厂类具有一个通用的模板化基类:
请注意, 和 的大小/内部结构因字段不同ChildClassFactory
而BaseClassFactory
有所不同。
现在,如果 a 有ChildClassFactory
(or Factory<ChildClass>
) 的实例,我可以安全地将它转换为Factory<BaseClass>
(via reinterpret_cast
) 吗?
我知道你不能总是以这种方式转换模板类,但在这种特殊情况下,转换应该是安全的,不是吗?
我已经用 Visual C++ 2010 对其进行了测试,它确实有效。我现在的问题是这是否可以移植到其他编译器?
更新:由于存在一些混淆,让我澄清一下在我的示例中什么(应该是)重要的:
ChildClass
是一个子类BaseClass
- 的用户
Factory<BaseClass>
不知道BaseClass
将创建哪个子类。他只知道那BaseClass
是被创造出来的。 Factory<T>
没有自己的字段(除了 vtable)。Factory::create()
是virtual