假设我在C库中有一个函数指针
int (*fptr)(void);
我有一个c ++课程
class A { static int func(); }
我可以关注,在任何平台上都是安全的
ftpr = A::func;
我希望A::func()
返回bool
。
class A { static bool func(); }
我不介意投射
fptr = reinterpret_cast<int(*)()>(A::func);
但它在任何平台上都是安全的吗?乍一看它似乎会(只要sizeof(bool) <= sizeof(int)
),但我不太确定。
答案 0 :(得分:4)
不,转换函数指针是不安全的。通过错误类型的函数指针调用函数会产生未定义的行为。
如果您需要C ++代码与C代码互操作,请不要在接口中使用C ++ bool
类型(或者,就此而言,C没有的任何其他C ++类型)。