下面的代碼編譯乾淨的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'實際上是一個函數類型,而不是函數指針類型(但這不會使您的問題無效,實際上它會使它更有趣) –