どのように上部と下部のconstのconstを区別するためにC ++

https://blog.csdn.net/qq_19528953/article/details/50922303

ポインターは、実際には2つのオブジェクト、オブジェクトポインタ自体を定義し、それが意味します。両方のオブジェクトはconstので定義することができます

ポインタ自体が定義されている場合、それはトップポインタCONSTと呼びます。

指摘-するときにポインタ自体が定義されていないが、定数として定義されているオブジェクト、前記底ポインタCONST

型名がどうなる前と後のconst宣言はのconst int型とint型のconstは等価で、配置することができます。

1.ステートメントポインタは定数CONSTの底部を指しています

int型 A = 1。;
 のconst  int型 * PA =&A; // 下のconst 
* PA = 2は、基礎となるオブジェクトのconstポインタが定義されているので、あなたがオブジェクトの内容変更することはできません間違っている
コンテンツPAポインタポイントが一定ではなく、それはすることができます代入文で
、A = 2が可能です

2.ポインタ定数

アドレス値を格納し、定義が初期化されなければならない代表ポインタ自体が、変更することはできません。constポインタは、constのように宣言シンボル*の後ろに配置する必要があります*

1  INT A = 1 ;
 2  、INT B = 2 ;
 3 * のconst  int型 PA =&A; // 先頭ポインタ
4。 PA =&B、間違った、一定のポインタ格納されたアドレス値を変更することはできません

そこで、両者の間の区別の役割は何ですか?

そこ根本的な制約は、あるオブジェクトのコピーが実行基礎となる定数のconstのconstのconstに割り当てることはできません。言い換えれば、限り、あなたは正しく上部と下部のconstのconstを区別することができますように、あなたは、このような割り当てエラーを回避することができるようになります

1  INT num_c = 3 ;
 2  のconst  int型 * P_C =&num_c;   // P_CポインタCONST底
 3。 // INT * = P_DのP_C;   // エラー、下塗りされていない底ポインタのconstのconstポインタに割り当てることができない
4。 CONSTの INT * = P_C P_D; // 正しく、それは下層の底ポインタのconstのconstポインタにコピーすることができ

キャストはconst_cast変換関数を使用する場合2は、CONSTオペランドconst_castを根本的にのみ変化するため、上部層と下部層のconst CONSTを区別できるようにする必要があります。

1  INT num_e = 4 ;
 2  CONSTの INT * =&P_E num_e;
 3  // * = P_E 5;   // エラー、下地ポインタCONSTの内容を変更することはできません
4。 INT * P_Fはconst_cast = < INT *>(P_E);   / / 右、const_castを、基礎となるconstのオペランドを変更することができます。しかし、CONSTの種類を知らないnum_eを使用してください。
5 * P_F = 5 ;   // コンテンツを指す正しい、トップレベルの非constポインタを変更することができる
6。 COUT << num_e;   // 出力5

 

たとえば、子供のための

1  CONST  INT A = 1 ;  
 2  // INT * PI =&A;   // エラー、&​​aは、底CONSTで下塗りされていないCONSTに割り当てることができない
3。 のconst  int型 *のPI =&A; // 正しい、&​​aは底CONSTで、割り当てることができます下地CONSTに
4。 CONSTの INT * CONST * CONST PPI PI =&   // すなわち、上層がCONST底であるCONST 
5。 CONSTの INT   * CONST * CONST * =&PPPI PPIが; // 底CONST

 

おすすめ

転載: www.cnblogs.com/mch5201314/p/11485800.html