下面的代码编译干净的GCC,但得到的铛的错误:如何抛弃函数指针的constness?
typedef void (MyFuncPtr)();
void foo(const MyFuncPtr* ptr)
{
MyFuncPtr* myTestPtr = ptr;
}
锵错误:
error: cannot initialize a variable of type 'MyFuncPtr *' (aka 'void (*)()') with an lvalue of type 'const MyFuncPtr *'
(aka 'void (const *)()')
我曾尝试以下解决方案,它们都得到除了C风格的错误投:
的const_cast:
MyFuncPtr* myTestPtr = const_cast<MyFuncPtr*>(ptr);
错误:
error: const_cast to 'MyFuncPtr *' (aka 'void (*)()'), which is not a reference, pointer-to-object, or pointer-to-data-member
reintepret_cast:
MyFuncPtr* myTestPtr = reinterpret_cast<MyFuncPtr*>(ptr);
错误:
error: reinterpret_cast from 'const MyFuncPtr *' (aka 'void (const *)()') to 'MyFuncPtr *' (aka 'void (*)()') casts away
qualifiers
C样式转换:
MyFuncPtr* myTestPtr = (MyFuncPtr*) ptr;
成功!
问题:
为什么const_cast不能在函数指针上工作?
正在使用C风格唯一的解决方案吗?
为什么这个工作在海湾合作委员会没有铸造?
在此先感谢!
编译器版本:
* G ++版本4.6.3
*铛版本3.5.0.210790
'const MyFuncPtr *'类型几乎是无稽之谈,就像没用(几乎完全没用)。而且我能想到的每个用途都没有与它关联的*实例*。为什么你的程序中有这种类型?过于通用的代码? – Yakk
请注意,'MyFuncPtr'实际上是一个函数类型,而不是函数指针类型(但这不会使您的问题无效,实际上它会使它更有趣) –