4

const ポインターと非 const ポインターを比較します。比較は合法ですか?そのような比較のための特別な注意。ありがとう。

4

2 に答える 2

10

へのポインターはT、への const ポインターに暗黙的に変換できますT。同様に、へのポインターは、Tへのポインターに暗黙的に変換できますconst T。コンパイラーは、ポインターを const ポインターと比較しようとするときに、必要に応じてこれらの変換のいずれか、または両方を行います。2 つの非 const ポインターまたは 2 つの const ポインターを比較することほど危険なことはありません。

于 2013-02-07T23:56:44.520 に答える
-3

const の目的

const char* p

変更しないことを約束することです。理論的には、非 const ポインターが同じコード内の同じ場所を指すことはありません。これは、適切なコーディングの実践の問題です。実際には、作業が楽になるという理由で何かを const にすることになるかもしれませんが、概念的には真の const ではありません。その場合、比較する必要があるかもしれません。前述のように、使用しているコンパイラとその設定に応じて、このような比較が必要な場合とそうでない場合があります。そうでない場合に備えて、これが気になる場合は、比較する前に非 const へのキャストを強制します。たとえば、次のようになります。

if ((char*)const_p == non_const_p)

于 2013-02-08T00:02:21.170 に答える