C ++のconst参照ポインタ

簡単に言えば、定数の性質を思い出します。

メインINT()
{ 
    CONST INT BUFFSIZE = 512; 
    = 512 BUFFSIZE; //×BUFFSIZEは一定です
}

初期化:

const int型I = get_val(); //√実行時の初期化
のconst int型J = 42; //√コンパイル時に初期化
のconst int型のk; //初期化されていないK×

オブジェクトが別のオブジェクトを初期化するために使用される場合、それらは無関係CONSTありません

もし私= 42; 
constのあなたは、CI = I; 
もしJ = CI;

CIの形成に役割を果たします定数が、唯一の一定の機能CI CIは、操作の実行中に変更されました

constの参照#

#への定数の参照

参照が呼び出され、constオブジェクトにバインドされ、一定の参照

定数への参照は、それが結合しているオブジェクト変更するために使用することができないオブジェクト参照と参照が定数であると

const int型のCI = 1024; 
const int型&R1 = CI;

それに注意してください。

1024 = CI int型のconst; 
のconst int型&R1 = CI; 
R1 = 42であり; //×R1が基準定数である
&R 2 = CI INT; //× r2は、ciは定数オブジェクトはconst参照であります

CIは、それがバインドされたオブジェクトを変更するために使用できないので、それはCIを参照することによって変更することはできません(合法4番目の文は、その後、我々はR2で変更されたCIに行くことができると仮定して、明らかに間違っています)

同様に、次の2つの文

INT&R3 = R1。//× 
のconst int型&R4 = R1。//√

私たちの口腔は述べて一定の基準が実際にconst参照ポインタではなく、同じ、ため、定数を参照が存在しない、厳密に言えば、参照がオブジェクトではありません、それは同じ参照自体が付与され得るために、我々は方法がありません

(PS:C ++は許可されていませんので、任意のオブジェクト参照を変更するためにバインドされているので、すべての参照が定数であることが理解できるオブジェクト参照が一定であるかどうか、もちろん、それは操作に参加することを決定することができますが、どんなにどのように)を基準と対象物との間の結合関係には影響しません

定数#への参照を初期化

我々は、参照されるオブジェクトのタイプの種類を知っていると同じで参照しなければならないが、初期化定数参照は第1(第2の例外が表示されることを含む:限り発現ができるように、初期化定数参照を初期値として任意の式を使用することを許可されています参照のタイプに変換)

42は、I = INT; 
のconst int型&R1 = I; // CONST INT√対象が正常INTに結合させる
のconst int型&R 2 = 42; // √r2は一定の基準で
のconst int型&R3 = R1 * 2 ; //√ r3は一定の基準である
INT&R4 = R1 * 2; //×R4は非常に一般的な基準量であります

これはなぜ起こるのですか?簡単な例を見てみましょう

ダブルDVAL = 0.114514; 
const int型&里= DVAL。
裁判所未満<< "RI =" <<里<<てendl;

実行出力

RI = 0

このプロセスでは、実際には、コードコンパイラを変更:

ダブルDVAL = 0.114514; 
const int型温度= DVAL。
const int型&里=温度; 
裁判所未満<< "RI =" <<里<<てendl;

この場合、RIにバインドされたオブジェクトの一時的な量あなたが正しい何が起こっているか、上記のコードで読み取ることができ、

里が一定でない場合:あなたは、RIが一定でない場合は、上記の初期化プロセスの実装では、結果の種類になり、次のことを想像することができます。そのようにC ++ Riが不正に分類以下の動作も、(この時点での結合量が一時的DVALない)RIによって参照されるオブジェクトの値を変更することになる割り当てを可能にします

ダブルDVAL = 0.114514; 
INT&里= DVAL。//× 
裁判所未満<< "RI =" <<里<<てendl;

また、ご注意const参照のためにconstオブジェクトを参照しない場合があります

のみにconst参照基準動作が関与する可能性にするために定義され、オブジェクト自体が定義されている定数を行っていないかどうかへの参照は、オブジェクトはまた、他の手段によってその値を変更することができ、非一定であってもよいです

42はI = INT; 
INT&R1 = I; 
のconst int型&R2 = I; 
// R2 = 0; //×R2は、一定の基準である
COUT << "R2 =" << ENDL << R2; 
I = 0; 
COUT < < "R2 =" << R2 << ENDL。

プログラムは、以下を出力します。

42、R 2 =
R 2 = 0

constとポインタ#

#への一定の指し示すポインタ

同様、基準定数定数ポインタをポインティングすることが参照するオブジェクトの値を変更するために使用することができません

同時に、あなたは一定のオブジェクトを格納するアドレスは、ポインタのみの一定の使用を指すことができます。

ダブルHOMO = 1.14のconst; 
ダブル&HOMO * = PTR; //×PTRが共通へのポインタである
のconst * CPTR =ダブル&HOMO; //√ 
CPTR = 5.14×//割り当てることがない* CPTR

参照とは異なり、我々は変更することができるために一定のポインタポイントをポイントオブジェクト

ダブルHOMO = 1.14のconst; 
constの*ダブルCPTR =&HOMO; 
COUT << "CPTR =" <<てendl << CPTR * 
constのダブルhomo2 = 5.14; 
CPTR =&homo2;   
COUT << "CPTR =" CPTR << << * ENDL; 
//オブジェクトの一定量へのポインタである可能を指すように

私たちは、ポインタの型が参照先と一致していなければならないと言うが、ここでは最初の例外ではあるが、参照に似ていることに注意してください。でき指し定数ポインタにポインティングをオブジェクトの大量

二重HOMO = 1.14 CONST、
CONST *二重CPTR =&HOMO; 
二重DVAL = 3.14; 
CPTR =&DVAL; //オブジェクトの大量に一定のポインタを可能にするために指す
* CPTR = 0.0 //しかし定数へのポインタをポイントすることによって変更を許可しません値-constオブジェクト

したがって、所定の定数ポインタも、それは一定でなければならない参照先オブジェクトを指し、いわゆる点では指示物体のポインタの値を変更することにより、一定必要としないオブジェクトは、他の手段を変更することにより所定の値に呼ばないれていません

ダブルHOMO = 1.14のconst; 
constの*ダブルCPTR =&HOMO; 
COUT << "CPTR =" <<てendl << CPTR * 

ダブルDVAL = 5.14; 
CPTR =&DVAL; //オブジェクトの偉大な量に一定のポインタを許可するように指すように
/ / * CPTR = 0.0 // CONSTはなく、一定のポインタ値を指すことによって、オブジェクトを変更
COUT <<「CPTR =」<< ENDL << * CPTR; 

DVAL =オブジェクトの0.0 //値が他の手段によって参照することができます変更
はcout << "CPTR =" << * CPTR <<てendl;

今、私たちの出力は次のようになります。

CPTR = 1.14
CPTR = 5.14
CPTR = 0

constポインタ#

異なる参照、ポインタ自体は、オブジェクトがポインタ自体定数、すなわち可能にするように、ある一定のポインタを、一定のポインタを初期化する必要があり、(オブジェクトのアドレスポインタに格納されている)初期値の完了後に変更することができません

放電前* constキーワードは、ポインタを説明するための(ポインター自体の、すなわち一定値)は一定であります

errorNumb = 0のint; 
int型のconst * =&curErr errorNumb; // curErrは定数ポインタは常にerrNumbポイント
のconstダブルPI = 3.1415を、
constのconstの*ダブル&PIP = PI; // PIPは、オブジェクトへの定数のconstポインタであります

2つの非常に異なる文言:

INT * CONST curErr =&errorNumb; // curErr あっ向けerrNumb 
* = curErr 1; //呼ばれる変数の値を変更することができ
CONSTのINT * curErr =&errorNumb; // curErrは一定のポインタである
curErr = 1 *; //×言及はcurErrの値を変更することはできません

constの上部と下部のconst#

ポインタ自体が目的であるので、別のオブジェクトを指すことができ、したがって、ポインタ自体は一定ではない、及びオブジェクトポインタが一定ではなく、二つの独立した問題であり、トップCONSTはポインタそのものを表し、定数でありCONST根底にポインタ指示をオブジェクトの意味の範囲内で一定であります

実際には、任意のトップレベルのconstオブジェクト(自体)を表すことができ、それはトップであってもよいので、より特別な、一定のアナログである下地CONSTであってもよいです

0 = I値int、
int型のconst * = P1&I; // P1自体が一定で、最上層のconst 
のconst intは= 42がCIであり; // CI自体は一定であり、上層のconst 
のconst int型*&P2 = CI; * CONST //後、 p2が根底にあるのconstへの一定のポインタである
のconstのconst int型* P2 = P3; //、右下はP3が指し定数ポインタでは一定であり、見た目で左上に見える
のconst int型&R = CI; // const参照文を底CONSTあり、rは一定の基準であります

コピー操作は、トップ層はconstの影響を受けていない、オブジェクトのコピーの値には影響しません

そして、=あなた。
P2 = P3;

しかし、根本的なconstが制限があります。

場合コピー動作、コピー・インと同じ基本const修飾は、生きているデータ・オブジェクトの二つのタイプを変換することができる必要がありますオブジェクトをコピー(エネルギーの量を一定に変換し、その逆ではありません)

int型* P = P3; //×の P3 下のconstを備え、pがない
のconst int型* P = P3; // √P 、P3は下のconstです
P2 = P3; //√P2とP3は下のconstです
P2 =&I ; //√INT INT *がCONSTに変換することができる
INT&CI = R&LT; //通常INT&×CONST INT&に縛られない
のconst int型&R 2 = I; // √のconst int型& 共通INTに接続することができ

おすすめ

転載: www.linuxidc.com/Linux/2019-09/160781.htm