2

c++ の const ref と const ポインターの違いを知りたいです。何かを const ref として宣言するとき、その値を変更できますか? またはconstはオブジェクトに行きますか?const ポインターは POINTER を変更できないことを意味するが、それが指す VALUE は変更できることを知っているからです。

例えば:

const char& a; // ?
const char* a; // pointer is const
4

3 に答える 3

5

フレッド・コンスト& 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 オブジェクトを変更することもできません。

詳細については、このリンクを参照してください。

于 2012-05-01T17:41:02.313 に答える
2

const char* a; // pointer is const

これは定数へのポインタです。これ:

char* const a; // pointer is const

定数ポインタです。

于 2012-05-01T17:35:13.930 に答える
2

私はこれらを次のように書くことを好みます: 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ポイントを変更することはできます。

于 2012-05-01T17:38:47.890 に答える