私は、以下のすべてのない場合は、okです:はstatic_castボイド* static_castをボイド対のchar * **文字**
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 **'
誰かがに説明することができますしてくださいなぜ私は2番目の例が許可されていません。 C++標準をあなたの答え全体として引用してはいけません。なぜなら、私は既にそれを引用している答えを見てきたので、その意味を理解できません。私は理解したいなぜ 2番目の例はうまくいかない(つまり、大きな助けになる危険な例を挙げることができたら)。私はそれを得ないので。私にとって、両方の例はキャストポインタです。間接参照の追加レベルで差異が生じるのはなぜですか?
ポインタを暗黙的に 'void *'に変換し、逆方向に静的キャストすることができます。しかし、これは一般的ではない 'T *'や 'U *'では当てはまりません。 (今度は 'T = char *'と 'U = void *'と考えてください) –
'char **'に 'void **'をキャストすることができます。 –
@Kerrek SB - はい、なぜこれは許可されていませんか?これはいつ安全ではないでしょうか? – e244