(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"
什么意思?
int f() { return 42; }
int main()
{
void(*fp1)() = reinterpret_cast<void(*)()>(f);
int(*fp2)() = reinterpret_cast<int(*)()>(fp1);
// Safe to call the function ?
fp2();
}