我对以下内容有误吗?
C++ 标准说指针到函数和指针到对象(和返回)之间的转换是由实现定义的语义条件支持的,而所有 C 标准都说这在所有情况下都是非法的,对吗?
void foo() {}
int main(void)
{
void (*fp)() = foo;
void* ptr = (void*)fp;
return 0;
}
ISO/IEC 14882:2011
5.2.10 重新解释演员表 [expr.reinterpret.cast]
8 有条件地支持将函数指针转换为对象指针类型或反之亦然。这种转换的含义是实现定义的,除非实现支持双向转换,将一种类型的纯右值转换为另一种类型并返回,可能具有不同的 cvqualification,应产生原始指针值。
我现在在 C 标准中找不到任何关于它的内容......