C++メモ:参照、ポインタ、const制限子
11868 ワード
参照参照は初期化する必要があります.すなわち、参照は「生」から別のオブジェクトにバインドする必要があり、「一から終わる」 でなければなりません.参照はオブジェクトにバインドする必要があり、フォント値または式計算結果 にバインドすることはできません.参照のタイプは、バインドされたオブジェクトと厳密に一致しますが、2つの例外があります. 定数参照は、タイプが に一致する限り、非常量、式、またはフォント値にバインドすることができる.は、ベースクラスの参照を派生クラスオブジェクト上の にバインドすることができる.
参照自体はオブジェクトではないため、参照に対する参照 は存在しない.
ししんポインタのタイプは、そのポインタが指すオブジェクトと厳密に一致しますが、2つの例外があります. は、タイプが に一致する限り、定数を指すポインタを非常量を指すことができる.は、ベースクラスのポインタを派生クラスオブジェクト に向けることができる.
参照はオブジェクトではないため、参照を指すポインタ は存在しない.字面値 を得る.は、すべてのポインタを初期化し、オブジェクトを定義してからポインタを定義することを推奨します.ポインタがどこを指すべきか分からない場合は、 に初期化します. を実行することができる.あるオブジェクトを利用して別のオブジェクトを初期化する場合、それらが である.のデフォルトでは、 を変数の宣言および定義の前に追加する必要があります.定数参照を定数にバインドできます.両方とも変更できません. はまた、タイプが一致する限り、定数参照を非常量にバインドすることもできる.ただし、参照によって非常量の値を変更することは許されないが、非常量の値は他の方法で変更することができる: はまた、定数参照をタイプマッチング式またはフォント値: にバインドすることもできる.では、非常量参照を定数オブジェクトにバインドすることはできません.これは、非常量参照によって定数オブジェクトを変更するリスクがあるためです. に向けることは許されない.が .
非常量ののポインタ自体は を初期化する必要がある.ポインタ自体が を変更することなく、ポインタによってそのポインタが指すオブジェクトを修正することができる.このときのポインタおよびそのポインタの値は、 を変更することはできない.
最上階最上階 である.下位 である.オブジェクトのコピー操作を実行する場合、コピーおよびコピーされたオブジェクトは、同じ下位 を有する必要がある.
double value = 3.14159;
double &ref_value = value;
double &ref1; // error: 'ref1' declared as reference but not initialized
double &ref2 = 3.14159; // error: cannot bind non-const lvalue reference of type
// 'double&' to an rvalue of type 'double'
double &ref3 = 3.14159 * value; // error: cannot bind non-const lvalue reference of type
// 'double&' to an rvalue of type 'double'
int ival = 1;
double &iref = ival; // error: invalid initialization of reference of type
// 'double&' from expression of type 'int'
double &ref_ref_value = ref_value;
ししん
nullptr
を用いる空ポインタnullptr
または0
const
修飾子const
オブジェクトは初期化する必要があり、一度作成するとその値は変更できないため、const
オブジェクト上でのみその内容を変更する操作const
であるかどうかは重要ではないconst int buffer_size = 1024;
int buffer1 = buffer_size;
const int buffer2 = buffer1;
const double value2; // error: uninitialized const 'value2'
const
オブジェクトはファイル内でのみ有効に設定されています.複数のファイルに同じ名前のconst
変数が表示される場合、異なるファイルで独立した変数がそれぞれ定義されていることに等しい.const
オブジェクトを複数のファイル間で共有するには、extern
キーワード// file1.cpp
extern const int buffer_size = 512;
// file2.cpp
extern const int buffer_size;
const
への参照const int buffer_size = 1024;
const int &ref_buffer_size = buffer_size;
double value = 3.14159;
const double &ref_value = value;
value = 1.0; // ref_value = 1.0
ref_value = 3.0; // error: assignment of read-only reference 'ref_value'
const int &ref1 = 1024;
const int &ref2 = ref1 * 2;
const int buffer_size = 1024;
int &ref_buffer_size = buffer_size; // error: invalid initialization of reference of
// type 'int&' from expression of type 'const int'
const
へのポインタconst double value = 3.14159;
const double *p_value = &value;
double *p_value2 = &value; // error: invalid conversion from 'const double*' to 'double*'
value
は定数であるため、ポインタによってその値を変更することはできないので、通常のポインタを定数const
を指すポインタは、非常量を指すことができるが、そのポインタによってその指すオブジェクトの値を変更することは許されない:double sqrt2 = 1.414;
const double *p_sqrt2 = &sqrt2;
*p_sqrt2 = 1.732; // error: assignment of read-only location '* p_sqrt2'
// sqrt2 , p_sqrt2 sqrt2
// sqrt2
非常量の
const
ポインタを指すconst
であるため、その値は変更することができず、つまりconst
のポインタを他のオブジェクトに向けることができないため、const
のポインタはdouble value = 3.14159;
double *const p_value = &value;
value = 1.0; // value ,
*p_value = 2.0; // value = 2.0,p_value const , value
double sqrt2 = 1.414;
p_value = &sqrt2; // error: assignment of read-only variable 'p_value'
const
であるにもかかわらず、そのポインタが指す値が非常に多い場合、ポインタ自体の値const
へのconst
ポインタconst double value = 3.14159;
const double *const p_value = &value;
最上階
const
const
:ポインタ自体がconst
const
:ポインタが指すオブジェクトがconst
、または参照バインドされたオブジェクトがconst
const
資格