c++ の const ref と const ポインターの違いを知りたいです。何かを const ref として宣言するとき、その値を変更できますか? またはconstはオブジェクトに行きますか?const ポインターは POINTER を変更できないことを意味するが、それが指す VALUE は変更できることを知っているからです。
例えば:
const char& a; // ?
const char* a; // pointer is const
フレッド・コンスト& x;
これは、x が Fred オブジェクトのエイリアスであることを意味しますが、x を使用してその Fred オブジェクトを変更することはできません。
フレッド const* p;
Fred const* p は、「p が定数 Fred を指す」ことを意味します。Fred オブジェクトは、p を介して変更することはできません。
Fred* const p;
Fred* const p は、「p は Fred への const ポインター」を意味します。ポインター p を変更することはできませんが、p を介して Fred オブジェクトを変更することはできます。
最後の to を組み合わせて取得することが可能です:
フレッド const* const p;
Fred const* const p は、「p は定数 Fred への定数ポインター」を意味します。ポインター p 自体を変更することも、p を介して Fred オブジェクトを変更することもできません。
詳細については、このリンクを参照してください。
const char* a; // pointer is const
これは定数へのポインタです。これ:
char* const a; // pointer is const
定数ポインタです。
私はこれらを次のように書くことを好みます: char const * a
vs. char * const a
.
これにより、右から左に読み取ることができます: char const * a
is:a
は定数へのポインターchar
であり、char * const a
is:a
は定数へのポインターchar
です。そして、他のコードを読むと、それを覚えているだけですconst char* a = char const* a
.
あなたの質問の他の部分に答えるには:
何かを const ref として宣言するとき、その値を変更できますか?
人々は const ref という用語を、実際には定数への参照を意味するように誤用しています (定数参照は意味がないため)。したがって、const refは、値を変更できないことconst char& a
を意味します。しかし、実際に定数参照が必要な場合は、値を変更でき、部品に違いはありません。char& const a
const
ポインターの場合は、値のポイントをconst char* a
変更できないことを意味します。a
これを比較するchar* const a
と、ポインターを変更することはできませんが、値のa
ポイントを変更することはできます。