2016-06-29 1 views
-2

"const型データまたは非const型データのいずれかのアドレスをconstへのポインタに割り当てることができます。但し、データ型自体はポインタではありませんが、非constポインタのアドレスである非constポインタのアドレス。ポインタとconstについての例を次に示します。

参考:スティーブンプラータによってC++プライマープラス

+0

のようなことをすることができます。あなたがそれについて理解していないことを例を挙げて教えてください。 – user463035818

+0

@ tobi303私は全く理解できませんでした。私の友人さえしませんでした。 – robstat7

+0

これは、著者がC++を理解していないためです。 "データ型自体がポインタではないという条件で提供されている"節は間違っています。証明: 'int * p = nullptr; int * const * pp =&p'です。この例では、 'p'は非constデータとポインタで、' pp'は 'int * const'へのポインタです。 – MSalters

答えて

1

あなたは非constオブジェクトを持っている場合は、

int a = 10; 

は、あなたがconstのと非const int型の両方へのポインタにそのアドレスを割り当てることができると言います。

int* p = &a; //OK 
const int* pc = &c; //OK can't modify *pc 

一方で、あなたはconstオブジェクトを持っている、場合、あなただけの私があなたに提供引用してい

const int a = 10; 
int* p = &a; //ERROR, because it would allow modifying `a` via `*p` 
const int& pc; //OK 

一つの問題は、それが使用していることであるのconstへのポインタにそのアドレスを割り当てることができます「constポインタ」と呼ばれるものを実際に参照する用語「constポインタ」。比較

int * p const = nullptr; 

これは実際にはconstポインタです。ポインタ自体の値、つまりポインターの値を変更することはできません。

const int * p; 

本書ではこれをconstポインタと呼んでいますが、ポインタ自体はconstではありません。 p = &a;、次にp = nullptr;など

+0

最後の行を例として説明してください。しかし、 "非constデータにのみ非constデータを割り当てることができます。"なぜ? – robstat7

関連する問題