3

a) X1 と X2 以下は同等ですか? そうでない場合、明示的な再解釈/定数キャストをどのように行う必要がありますか?

 void some_legacy_function(const void* arg) {
    char** X1 = (char**) arg;
    char** X2 = reinterpret_cast<char**>(const_cast<void*>(arg)  ); 
    /* not surprisingly, indexing into X1 randomly crashes in release build */
 }

b) このキャストは私には非常に奇妙に思えますが、状況によっては実際に 100% 合法なのですか?

4

2 に答える 2

2

はい、それらは基本的に同じです。ただし、C++ スタイルのキャストでは、コードの読者に奇妙なことをしていることが示されますが、C スタイルでは気づきにくいです。

const の着信パラメーターが非 const としてキャストされている場合は、合法ですが、常に非常に疑わしいです。

于 2013-07-16T21:33:26.630 に答える