私が次のことをすれば、すべて問題ありません:
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 番目の例が機能しない理由を理解したいと思います (つまり、危険な例を挙げていただければ大変助かります)。わからないから。私にとって、どちらの例もポインターのキャストです。追加レベルの間接化によって違いが生じるのはなぜですか?