如果我做下面一切正常:的static_cast無效*字符* VS的static_cast無效**字符**
char* cp = "abc";
void* vp = NULL;
vp = static_cast<void*>(cp);//ok
cp = static_cast<char*>(vp);//ok
但下面是不是:
char** cpp = &cp;
void** vpp = NULL;
vpp = static_cast<void**>(cpp);//error C2440: 'static_cast':
//cannot convert from 'char **' to 'void **'
cpp = static_cast<char**>(vpp);//error C2440: 'static_cast':
//cannot convert from 'void **' to 'char **'
請某人解釋我爲什麼不允許第二個例子。請不要引用C++標準作爲您的整體答案,因爲我已經看到引用它的答案,我不明白它們的含義。我想了解爲什麼第二個例子不起作用(例如,如果你可以給出一個例子,這將是一個很好的幫助)。因爲我不明白。對我來說,這兩個例子都是投射指針。爲什麼額外的間接水平有什麼不同?
您可以將任何指針隱式轉換爲'無效*',和靜態澆鑄在相反的方向。但是對於通常與'T *'和'U *'不相關的情況,這不是真的。 (現在想'T = char *'和'U = void *'。) – 2013-04-29 14:12:24
你可以將'char **'強制轉換爲'void *',反之亦然。 – 2013-04-29 14:18:50
@Kerrek SB - 是的,但爲什麼不允許?何時會不安全? – e244 2013-04-29 14:30:46