0
對於具有void *參數的方法,C++使用static/reinterpret_cast來進行轉換,或者在這裏有不同的機制嗎?void *作爲方法參數的轉換
void foo(void* p)
{
// ... use p by casting it back to Base first, using static/reinterpret cast
}
Base* base(new Derived);
foo(base); // at this exact line, is there a static/reinterpret_cast going on under the covers?
我問,因爲它似乎是一方面的標準說,對於C樣式轉換,C++會去嘗試一個C++投(靜態,重新詮釋,常量),直到一些被發現的作品。然而,我無法找到一個合理的解釋,當有一個void *參數的方法被調用時會發生什麼。在事情面前沒有演員,所以會發生什麼?
而從'T *'轉換爲'void *'的關鍵是最終的'void *'必須指向'T'對象的存儲位置的開始 - 這就是你想要的可能期望。但是我認爲,預期的行爲是標準中要求的(因爲標準需要預期的行爲並不總是這種情況)。 –
把'T *'轉換爲'void *'(其中'T'是一個對象類型)的另一個重要屬性是轉換回'T *'(它確實需要一個靜態轉換)會將原始值。 –
不考慮()(void *)方法的全局用處,你如何在foo()中使用p?你必須將其轉換回類型。但是,如果您將其重新投入使用,則您在主叫方有一個隱式轉換,而在被叫方有一個明確的轉換 - 這是一種不對稱的情況。在這種情況下,你不必假設發生的「隱式」轉換實際上是一種靜態轉換嗎? –