void* 的定义方式使得它可以指向任何东西。那么它可以用来指向一个函数(int send())吗?
int send();
void* p = send;
是否可以?当我这样使用时,它没有显示错误,为什么?如果没有,有没有办法将所有指针存储在单个变量中?
或许。在 C++11 之前,他们不能;但 C++11 增加了:
将函数指针转换为对象指针类型或反之亦然
有条件支持。这种转换的意义是
实现定义的,除非实现支持
双向转换,将一种类型的纯右值转换为
其他类型和背部,可能具有不同的cv资格,应
产生原始指针值。
这似乎还没有进入 C 语言。
当然,它们之间无法转换的原因是
它们的大小或格式可能不同。 Posix 要求他们这样做
具有相同的大小和格式,我希望所有 Posix 编译器都能
支持转换;无论如何,大多数人以前都这样做过,尽管这让他们
不合格。
EDIT:
更多信息。重读C标准后,我认为
对象指针和函数指针之间的转换未定义
行为:C 标准似乎不需要对此进行诊断
情况,但它绝对没有定义它的任何行为。作为
未定义的行为,实现(或 Posix)可以自由定义它。
或者只是做任何它想做的事情,而不记录它。
另一方面,C++,C++11 之前的版本,required诊断(虽然
许多编译器没有给出)。在 C++11 中,根据段落
上面引用的,它是实现定义是否实现
支持与否,如果实现支持,那么它们是
需要记录其行为。所以在所有情况下,一个实现
需要记录它的作用,如果不支持,则
如果代码尝试执行以下操作,则需要发出诊断
转换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)