でのCおよびC ++アプリケーションでのconst

でのCおよびC ++アプリケーションでのconst

CONST定義:CONSTは静的効果を生成する、変数を定義変更することを可能にするANSI Cのキーワードです。ある程度使用CONSTはCONSTはまた、パスカル、C ++、PHP5、BCのような他のプログラミング言語で表示され、プログラムの安全性及び信頼性を向上させることができる 。# ようにと。

基本的な使い方では、CおよびC ++で.const

  • この時間変数では、読み取り専用の権限であり、constがint型のconst A = 10のとき、変数を定義するために使用されます。その後、読み取り専用、それは割り当てることができない値をままにすることはできません。
    今回のconst int型のA = 10のことに注意してください;およびconstのA = 10 int型、同じセマンティクスを。const変数を変更する場合、この変数は初期化されて与えるようにしてください初期化されていない場合は、バックで初期化することはできません。

    #include<iostream>
    using namespace std;
    const int a=10;
    int main(){
    int b=a; //不为左值 合法
    a=100 //为左值 非法

  • いくつかのC言語コンパイラでアレイを初期化するために使用CONST変数(例えば、VC ++ 6.0のように)、コンパイラは文句であろう。これは、「読み取り専用変数」との「定数」によるものです。constのは意味が拡張されているのでしかし、そのC ++であなたがすることができます。

   しかし、数および列挙の#defineマクロによって定義されたタイプは、一定の初期トランスデューサアレイを定義するために使用することができます。

II。constとの#defineの違い

   彼らが好きな機能から、そのうちの二つが、彼らは異なっています。

  • constの共通変数が定義されている、プリコンパイルされた命令を、定義します。CONST変数が定義されていますが、定義はの#define定数です。#defineマクロは、展開前段階で定義された、読み取り専用変数CONST定義が運用段階のコンパイルに使用されます。例えば、ただの#defineを実行することができます使用しての配列を初期化します。

  • コンパイラ定数は、メモリの読み出し専用の領域に配置されているので、当然のことながら、それを変更することはできません。「読み取り専用変数は、」その値を保持するために新しいメモリを開放することであるが、この値は、コンパイラによって定義されて変更することはできません。指定された配列の長さのANSI Cの定義は、「定数」、そうエラーでなければなりません。
    実際には、従来のマクロ変数に定義CONSTより便利による効果に加えて、配列の長さは、使用しないように。したがって、CONSTはケースCONSTを利用することが可能なプログラミングと定義することができます。

III。一次元でのconstポインタを使用します

  • CONST int型P1 =&Aを、CONSTと同等INT P1 =&A。

  • const int型P1 =&Aを; // constが変更され、P1を、P1は、合法的な値として残されます違法左とP1値を
    CONSTが変更され、私たちが見ることができる
    P1を、* p1の値を直接変更することはできませんが、変更を指すように変更することができます値P1。

  • CONST P2 =&INT *; CONSTは// P2を変更し、P2が不正な値として残される、P2の値を正規として残され
    、この場合、CONSTはP2に変更され、P2は方向を変え、直接ではなく、変更することができる
    P2の値を。

  • int型CONST CONST P3 =&A; // constがそれぞれ修飾 P3、P3、あろうP3、P2の値が不正、その後として残されている P3 P3の値と方向変更されるべきではなく
    、我々が見ることができ、CONSTが変更されたP1をしません直接変更 P1の値が、値P1を変更するために指すように変更することができます。

  概要:変更することはできませんどのような、constの背後に何があります。INT Eg.const P1 =&Aとのconst int型&P2 = A; *それぞれP1、および値が点P2に変更することはできません。

IV。機能付きのconst

  constの大きな役割は、変更可能なパラメータの関数で、戻り値、さらには関数定義本体です。しかし、出力パラメータはCONSTで行う必要がある場合には機能を失っていることに注意してください。

  • 例えば:

void StringCopy(char*strDestination, const char *strSource);

 strSource入力パラメータである、strDestinationは、出力パラメータです。strSourceに変更のconstを追加した後、文strSourceの内容を変更する身体の試みの機能場合、コンパイラはエラーを指摘します。

  • 送達はCONST修飾子を扱う場合、関数の戻り値は、同じタイプのconst修飾子ポインタに割り当てられた、又はキャストを使用することができます。

const int* func(void){ //函数声明
int* a = func(); //报错
int* c = const_cast<int*>(func()); //正确
const int* b = func(); }//正确

(3)constメンバ関数
データメンバを変更せずには、const型宣言できるだけ機能します。constメンバ関数を書く時に、誤ってデータメンバーを変更、またはその他の非constメンバ関数を呼び出すことによってした場合、コンパイラはエラーを指摘します。

おすすめ

転載: www.cnblogs.com/xqy-888/p/11515485.html