我有函數聲明如下常量無效*指針轉換爲特定的類指針
void func1(const void& * pThis) {
MyClass* pMyClass = static_cast<MyClass*>(pThis); //....I use PMyClass pointer.
}
我收到錯誤不能轉換const void*
到MyClass*
如何做到這一步?
我有函數聲明如下常量無效*指針轉換爲特定的類指針
void func1(const void& * pThis) {
MyClass* pMyClass = static_cast<MyClass*>(pThis); //....I use PMyClass pointer.
}
我收到錯誤不能轉換const void*
到MyClass*
如何做到這一步?
您可以
MyClass* pMyClass = const_cast<MyClass*>(static_cast<const MyClass*>(pThis));
但這種可怕的語法提示:爲什麼那麼函數有一個const的說法,難道你不希望它像
void func1(void * pThis) {
當然,你可以採用C風格演繹捷徑:
MyClass* pMyClass = (MyClass*)pThis;
但是如果可能的話我會修改設計。
最重要的是,如果指針指向的是一個實際爲「const」的對象,那麼以非const方式訪問它是未定義的行爲。 'const_cast'只能用於非常特殊的情況,絕不輕鬆。 –
const
是問題所在。它不能使用static_cast
丟棄。鑑於你將它轉換爲非const MyClass
,無論如何,接受const參數都沒有用處。你可以使用const_cast
去除常量,但那會很糟糕 - 你的方法聲明它不會改變參數,但它實際上正在改變它。
你的意思是把'const'限定符作爲演員的一部分嗎?如果是這樣,你還需要一個'const_cast';否則,您需要將其強制轉換爲'const MyClass *'而不是... – reuben
'const void&* pThis應該不會編譯,因爲不允許指向引用:http://ideone.com/XAzWA ......在這種情況下,還有另一個問題:「無效&」甚至沒有意義。 – Nawaz
'const void *'指向不應該被修改的內存。 一個void *(非const)指向可以被修改的內存(但不能通過void *;你必須首先將它拋出)。 – jmishra