将 void 指针转换为指向类型的指针时使用的术语是啥?

Posted

技术标签:

【中文标题】将 void 指针转换为指向类型的指针时使用的术语是啥?【英文标题】:What is the term used for the act of casting a void pointer into a pointer to a type?将 void 指针转换为指向类型的指针时使用的术语是什么? 【发布时间】:2016-06-02 08:34:28 【问题描述】:

将 void 指针转换为指向类型的指针的行为(例如,编程语言理论家)使用的术语是什么?是“上当”吗? “输液”? “打字”?

注意事项:

这显然是一个演员表,显然是一个重新解释演员表 - 但我正在寻找一个更具体的术语,表达从无类型指针到有类型指针的过渡。 请不要争论避免这种情况是否是个好主意,这真的不是问题。

【问题讨论】:

这是一个演员表 IMO。指向 void 的指针是一种类型,而指向 int 的指针 ie 是另一种类型。因此,对于 void *p=NULL; int *i = (int *)p;,我将一个 void 指针转换为一个 int 指针。 C 还是 C++?在 C 语言中,我会说这个词是“不必要的”。 什么都没有?你必须把它拼出来。 这叫铸造。 @WeatherVane:为什么在 C++ 中需要它? 【参考方案1】:

我会说这是 brute force cast(或者只是 casting,就像 c nitpickers 所说的那样),就像它在 c++ 中表示的那样使用正确的reinterpret_cast<>,因此重新解释转换

【讨论】:

这是正确答案。为什么反对票?这是一个重新诠释的演员,纯粹而简单。 @RichardHodges 可以预见,答案会遭到否决。人们不喜欢听真话。 这不是事实 :) 不是一个双关语;而是文字游戏。做得很好,但我已经报告了,因为这是事实。 ;) @πάνταῥεῖ:但(int) my_crazy_typed_value 也是蛮力铸造。我想抓住一点,在演员表之前没有隐含的类型,而在演员之后还有一个。【参考方案2】:

如果你想组成一个新术语,你可以称之为type unerasure

【讨论】:

该术语假设目标类型曾经被擦除过,但不一定如此。 @einpoklum:怎么会这样?有什么方法可以创建我不知道的void 类型的对象吗?如果您指的是序列化数据的解释,那么我认为原始数据仍然有一个类型,即使只是通过 as-if 规则:) 好吧,虽然很可能/肯定是某些东西被强制转换为 void*,但重新解释的强制转换很可能不会回到那种类型。我可能有一个 char*,使用这些位,最终在目标地址处得到一个有效的浮点数。但是,你知道,我想这是一个足够好的术语。接受。 @einpoklum: 类型发明 也许;)

以上是关于将 void 指针转换为指向类型的指针时使用的术语是啥?的主要内容,如果未能解决你的问题,请参考以下文章

用于成员函数指针往返转换的 void(*)() 类似物

有没有办法避免隐式转换为 void*?

指向整数转换的不兼容指针将“void *”发送到“PHImageContentMode”类型的参数(又名“枚举 PHImageContentMode”)

如何定义指向函数的指针?

void指针意义Constvolatile#definetypedef接续符

从“void*”转换为指向非“void”的指针需要显式转换(第 17 行)