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 * avs. char * const a.
これにより、右から左に読み取ることができます: char const * ais:aは定数へのポインターcharであり、char * const ais:aは定数へのポインターcharです。そして、他のコードを読むと、それを覚えているだけですconst char* a = char const* a.
あなたの質問の他の部分に答えるには:
何かを const ref として宣言するとき、その値を変更できますか?
人々は const ref という用語を、実際には定数への参照を意味するように誤用しています (定数参照は意味がないため)。したがって、const refは、値を変更できないことconst char& aを意味します。しかし、実際に定数参照が必要な場合は、値を変更でき、部品に違いはありません。char& const aconst
ポインターの場合は、値のポイントをconst char* a変更できないことを意味します。aこれを比較するchar* const aと、ポインターを変更することはできませんが、値のaポイントを変更することはできます。