コンパイル時にコンパイラがエラーを表示します。 ( - > int型のconst int型)C++ - トップconstポインタを別の非constポインタに割り当てることはできません
int main()
{
int var, *p1;
const int *p2 = &var;
p1 = p2;
return 0;
}
無効な変換である:それは、このから
p1 = p2;
があることを私に伝えます。 Varはconstではないので、妨げてはいけません。私は、p2はvarの値を変更するために使用することはできませんが、私はそれがちょうどp1にvarの場合は、アドレスを割り当てる必要がありますと思う。
私はこのことを知っている:
p1 = &var;
は、同じ結果が得られ、前者が動作しない理由は何を私に興味があります。これは、C++の内部動作についての好奇心から外れています。
私の言語(C++と英語)については申し訳ありませんが、私はプログラマーでもネイティブスピーカーでもありません。
ありがとうございます。
それが指す 'int'を変更するのに' p2'を使うことは決してできません。 'p2'を' int * 'に割り当てることができれば、それを変更することができます。 'p2'が' const int'を実際に指している場合を考えてみましょう。代入 'p1 = p2'は' const'オブジェクトに値を代入することを可能にします。 –
コンパイラは 'var'を気にしません。 'p1 = p2'に' var'はありません。 'p1 = p2'では' const int * 'を' int * 'に変換しようとしています。これはC++では許可されていません。 – AnT
私はあなたが混乱するかもしれないと思うのは、constへのポインタに割り当てられていても、 'var'は*実際には*可変であり、コンパイラはこれを理解してポインタへの代入を可能にすべきだと思います非constに?これは、フロー解析でワームの蓋を開き、コンパイラが常に正しくなることは不可能です。また、プログラマーにとっては、上記より複雑なコードを混乱させるでしょう。 –