詳細のconst

定義:CONSTは、データ型が頻繁に更新することができないタイプのもので、値型変数または定数オブジェクトで修飾。

メモリ:場合によってはスタックおよびスタティックメモリ(グローバル変数)、C ++は、シンボルテーブルに格納されているC言語で存在してもよいです。

読み書きプロパティを:読み取り専用

主な機能:
1)定数のconstは、非変性して、定義することができます。
2)コンパイラが処理の内容についての詳細を知っている必要があり容易チェックを入力し、それはいくつかのリスクを排除します。
3)曖昧センス数が表示された回避、同じで調整しやすくパラメータを変更することができます。行うことができるのと同じように同じマクロ定義
されているが、変更が変更されました!
4)物事を保護するために、プログラムの堅牢性を高めるために、不慮の変更を防止するように変更することができます。
5)スペースを節約し、不要なメモリ割り当てを避けることができます。プログラムのコピーを1つだけ定義されたのconst定数は実行されている、との#defineは
メモリにコピーの数を定数。
6)効率を向上させます。通常コンパイラは、一般に、一定のCONSTは、その効率も高くなるように、コンパイル、ストレージなしメモリ読み出し動作中に、それが一定になりれ、記憶領域を割り当て、それらをシンボルテーブルに格納されていません。(C ++)。

意味:当初の目的のconstの打ち上げを、正確には、事前にコンパイラディレクティブを置き換え、その利点を継承しながら、その欠点を解消するために。


典型的な例である:
1.修飾ローカル変数
  。CONST = N-INT 5;
  。INT N- =定数5、
同じ2つの方法の効果は、再度割り当てられていません。

2.改変定数静的文字列
のconst char型* STR =「ABCDEF」 ;
constの修飾されていない場合、我々は、STR故意又は意図せず、裏面に書き込むことができる[4] =「X」は、ステートメント、これは読み出し専用メモリになり割り当ての面積、およびプログラムすぐに異常終了します。constのでは、このエラーはすぐにそれは、コンパイルされたプログラムでそれをチェックアウトすることができます
constのメリット。論理エラーはコンパイル時にキャッチされてみましょう

3。変形ポインタ、ポインタとポインタ定数定数
定数ポインタの書き込み:; int型のconstのconst int型* N * N; 両方はのconstポインタ表現されている
のconstポインタを参照することは、このポインタを変更することはできません変数の値が、参照および他のアドレス値へのリンクにより変更することができます。
CONSTのINT *; = 5 INT N =&; = 6; //は、 参照により定数ポインタの値を変更
INT B =; int型A = 5 6;のconst int型* N =&; N =&B; // によってアドレスへのポイントは、一定のポインタの値を変更

書き込まポインタ定数:INT * CONSTをN、
アドレスのポインタ定数を変更することはできないが、格納されたアドレス値が変更されてもよい

しばしば定数へのポインタ:CONST INT * CONST pは、
以上二つの組み合わせは、変数によって変更することができないポインタ及びポインタ値の位置を変更し、それ以外によってまだできません
ポインタ変数の共通の値を変更します。

4.関数の修正されたパラメータは、
定数ポインタ及びポインタ定数に従って、CONSTは、関数パラメータはまた、3つのケースに分割されている修飾

StringCopy(CHAR * strDestination、CONST voidへのポインタの内容の変更防ぐために)1 文字* strSource)を、
入力パラメータはstrSourceであります、strDestinationは、出力パラメータです。strSourceに変更のconstを追加した後、関数場合
ステートメントstrSourceの内容を変更する身体の試み、コンパイラはエラーを指摘します。

2)変更されたアドレスポインタボイドスワップ(INT * CONST P1を、防ぐ INT * CONST P2)
アドレスポインタにおけるポインタP1、P2が変更することはできません。

3)は、2つ以上の組み合わせです。

修正関数の戻り

、モード戻り値CONST修飾子「ポインタが渡された」とは、所定の関数は、関数(すなわちポインタ)内容が変更できない値を返した場合、唯一の戻り値は、同じタイプのconst修飾子ポインタに割り当てられます。

例えば定義された機能のため:CONST CHAR *のGetString(ボイド);
チャー*列str =のGetString(); //コンパイルエラーが発生し
CONSTチャーを* STR =のGetString() ; // 正しい

6変形関数とオブジェクト(C ++):INT楽しみ( )constは、
1)変性CONST関数は、クラスのデータメンバを変更しないことを約束し、この関数内の他の非constメンバ関数を呼び出しません。
構成CONST関数のオーバーロード、constオブジェクトはconstの関数を呼び出すだけできれば2)、非constオブジェクトの優先呼非const関数
3)CONST関数はCONST関数のみを呼び出すことができます。非const関数がconstの機能を呼び出すことができます。
4)の定義と宣言で、in vitroで定義されたクラスのconstメンバ関数は、CONST修飾子を必要としています

おすすめ

転載: blog.csdn.net/DreamSonGO/article/details/79716641