(5.2.10 / 6)C ++ 03関数へのポインターは、別のタイプの関数へのポインターに明示的に変換できます。関数の定義で使用されている型と同じではない関数型(8.3.5)へのポインターを介して関数を呼び出す効果は未定義です。タイプ「pointertoT1」の右辺値をタイプ「pointertoT2」(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();
}