C ++、constの修飾子

constの基礎 

C ++でのconstは、一定の値を変更することができない、定数を定義するために使用されます。作成した後にconstオブジェクトを変更することはできませんので、そのconstオブジェクトを初期化する必要があります。constの一定のアクションが発生しますときにのみ、独自の実行における特性変化操作、そのため、他の操作、constの定数と変数の一般的な無差中。

これは、宣言的です

無効メイン()
{
    INT A; 
     のconst  int型 B; // int型の定数
    INT  CONST C; // 上記
    のconst  int型 * D; // ポインタ定数、dはCONSTで、メモリデータに通常一定の整数を指し示すポインタを(変更することができません、自体が、変更することができる)
    、INT * CONST E; // ポイント型通常量INT 定数ポインタCONST INTは*ポインタ変数を変更することができない(が、それは、メモリ空間を指すように変更することができる
    のconst  int型 * CONST F; // 定数ポインタ(ポインタの点INT定数、それはメモリ空間を指し、変更することはできません) 
 }

 

constポインタ

   ポインタ自体がオブジェクトであり、そしてため関連CONSTポインタは二つのタイプに分けることができます。

1.定数ポインタ(CONSTへのポインタ)

  通常のポインタ定数を指しているポインタ定数。これは、オブジェクトへのポインタポイントによって修飾されていないが、ポインタ自体の変形が可能です。これは、ポインタがある一定のCONSTを指すように一定のポインタを必要としないことに留意され、唯一のポインタポイントによって変更することができない物体を指します。これは、フォームの声明です。

 const int型* D;

 

2.定数ポインタ(CONSTポインタ)

  定数ポインタは、オブジェクト定数へのポインタです。定数ポインタがその向きを変更することはできませんので、のconstポインタは、初期化する必要があります。ここでは、(ポインタとのconst定数ポインタを含む)一般的なポインタがconstオブジェクトをバインドすることはできませんのでご注意しなければなりません。constオブジェクトを指すように、あなたはポインタ定数を使用する必要がありますが、一定のポインタが指すオブジェクトには、必ずしも区別するために、ここで一定の対象ではありません。一定のポインタを作るためにので、一定のconstポインタを有し、一定のオブジェクトを指すことができます。次の文:

 int型 * constの E; // ポインタのポイントint型の一般的な一定の量。CONST INTは*ポインタ変数を変更することができない(が、それは、メモリ空間を指すように変更することができる
 のconst  int型 * CONST F; // 定数ポインタ(ポインタの点INT定数、それはメモリ空間を指し、改変することができません)

 

ポインタのポインタの区別と定数

  ポインタ定数(CONSTへのポインタ)と定数ポインタ(CONSTポインタ)は、より混乱を招くことになります。私はインターネットを見ると、私は「*一定であるのconst修飾子来る誰が見て、線を引くために中間である。」、それの良い、すなわち、区別するための方法を見つけることだと思います そのようなCONST INT * Dとして、「CONST INT」の後に生じるように交配*、CONSTがオブジェクトにint型、即ちポインタポイントを変更され、ポインタDは定数です。同様にINT * CONST Eについて、Eは一定のポインタであるので、CONST Eに分割した後、変性EポインタをCONST。

 

const参照

   ポインタ自体は異なるが一定の基準(CONSTを参照)、定数にのみ参照が存在しないので、オブジェクトではなくオブジェクトへの参照であるが、C ++では、結合されると、他のオブジェクトへの参照は、タイを変更することはできません基準自体が特性をCONSTように、オブジェクトを所与。いくつかの場所では、一定の参照に定数の参照であるかもしれない一定の基準は、それが何であるかを意味し、あなたが知っているところ、言及。

  一般的な要件は、基準の種類は、参照されるオブジェクトの同じタイプでなければならないが、関連CONST適用した場合の例外がある:即ち、初期化は、初期基準値一定の基準として表現の任意のタイプに適応するように変換することができます。例えば

INT私= 10 ;
 CONST  INT&R1 = I;            // 正しく、CONST INTであると共通INTに結合できるオブジェクト
のconst  int型&R2 = 10 ;         // 正しい、R2は、一定の基準で
のconst  int型&R3 = R1 * 2 ;    / / 右、R3は、一定の基準である     
INT&R4 = R1 * 2 ;           // エラー、R4は非常に一般的な基準量であります

初期化できるような理由があります。Const int型&R1 = iについて、そのようなコードは、コンパイラのように分解されます。

const  int型温度= I;
const  int型&R1 =温度;

システムは一時の一時的な目標量を生成する場合、その後、R1は、一時にバインドします。ここでは多くの人が疑問を持っていることが、なぜ一時オブジェクトへの参照をバインドすることができますか?C ++標準を指定:それは初期化されるまでの一時的なオブジェクトが参照オブジェクトにバインドされている場合は、一時的なオブジェクトは一時的なオブジェクトのライフサイクルを基準にバインドされている> =リファレンスライフサイクル(」、残ります参照エンドの寿命は)「(インサイドC ++オブジェクトモデル「page275を参照してください」)。しかし、一時的なオブジェクトの量を一定の基準に特異的に結合することに留意しなければなりません。従ってINT&R4は= R1 * 2、コンパイルされていません。

クラスのconst

C ++ではクラス、可能constがあります:

  • constオブジェクト
  • 一定のメンバーデータ
  • constメンバ関数

1.一定のオブジェクト

  定数オブジェクト、インスタンスは次のように、constのクラス宣言を追加することです。

const MyClassのMyClassの。

2.定数メンバーデータ

  constのデータは、同じカテゴリ内のクラス、そして外で宣言されています。

3. constメンバ関数

  定数オブジェクトを呼び出すことができconstメンバ関数の主な役割。以下のように、二つの方法でconstメンバ関数を宣言します。

ボイドFUNC(INT A)のconst {}。

ボイドのconst FUNC(INT A){}。

  2つの方法の間の差異、それら本質的にボイドFUNC(クラス名*この、CONST INT A); constのパラメータが変更されないが、これは(これは、付加的な暗黙のパラメータがアクセス現在のオブジェクトに使用されています、そのポインタにかかわらず書き込まCONSTの位置の)本質的に一定です。ので、このポインタC ++クラスが何を隠し本質的には、constのポインタの変更は、メモリ空間へのこのポインタポイントが隠されています。ここでFUNC()関数で、あなたはconstキーワードを追加しない場合は、通常のメンバ関数で、これはタイプのクラス名である* constの、つまり、これは一定のポインタであるが、一般的に一定のポインタであることはそう、定数を指すことはできませんオブジェクトはこの時点一定にする場合には、これは* constの、すなわち一定ののconstポインタを定義したのconstクラス名を取る必要があります。* constのクラス名としてのconstをこの定義に相当する、クラスのメンバ関数のパラメータリストの後にconstキーワードを追加します。この関数を呼び出すための唯一の定数オブジェクト。

 

 いくつかの結論:

。これらはオブジェクト非const、CONSTデータメンバのデータメンバにアクセスすることができる1)のconst constメンバ関数、オブジェクトCONSTのすべてのデータメンバにアクセスすることができます。

2)非constのconstメンバ関数は、オブジェクトの非const、constのデータメンバのデータメンバにアクセスすることができますが、オブジェクトのconstのデータメンバのいずれかにアクセスすることはできません。

3)定オブジェクトはconstメンバ関数を呼び出すことができ; constのバージョンと非constメンバ関数を同時にバージョンを発生したときにconstオブジェクトを非constメンバ関数を呼び出すために、非constオブジェクトをconstメンバ関数を呼び出すことができます。

4)良いプログラミングスタイルとして、私は、データが操作部材を変更しない場合は、メンバ関数はできるだけconstメンバ関数を宣言するメンバ関数、メンバ関数を宣言します。

 

 

  

C ++初心者の著者は、記事は必然的に間違っているとは良い場所は、私はあなたに正しいをお願い致します。

このブログは@CTHONから多くを取ら  https://home.cnblogs.com/u/cthon/ブログのコンテンツ、非常に感謝。

おすすめ

転載: www.cnblogs.com/honernan/p/11929238.html