C++学習の参照
2489 ワード
1.引用の定義と意味
a.参照の定義
参照は初期化する必要があります.参照が定義されると、他のオブジェクトを指すことができないため、初期化が必要です.
ただし、リファレンスはリファレンスオブジェクトのアドレスで初期化できません.オブジェクトのアドレスを参照する場合は、ポインタ参照を定義できます.
b.引用の意味
ここで、bは参照であり、bは実際にはaのアドレスを指しているが、ポインタではなく、参照であり、aの別名であり、aができるbはすべてできる.
2.参照の適用
実際の応用では,参照は主に関数の形式パラメータとして用いられる.リファレンスは、オブジェクトの別名であるオブジェクトのアドレスを内部に格納します.文字列定数や異なるタイプのオブジェクトなどのアドレス不可能な値の場合、コンパイラはリファレンスを実現するために一時オブジェクトを生成する必要があります.リファレンスは実際にオブジェクトを指しますが、ユーザーはアクセスできません.このとき,参照が関数パラメータとして用いられるとconst参照問題が導入される.
3.const引用問題 constリファレンスは、タイプ間でデフォルトで変換できる限り、異なるタイプのオブジェクトで初期化できます.文字列定数などのアドレス不可の値でも構いません.const引用でなければだめです. コンパイラは、リファレンスを処理するときに、次のように変換して一時オブジェクトを生成します. では、コンパイラが一時変数を生成するときに参照がconstである必要がある一時オブジェクトまたは値を指すことは許可されません.
注意:定数ポインタとポインタ定数
まとめ:非const参照が一時オブジェクトを必要とするオブジェクトまたは値 を指すことは許されない.アドレス値はアドレス不可の値 である. constリファレンスは、このリファレンスによってリファレンスのオブジェクトの値を間接的に変更しようとすると、コンパイラがエラーを報告することを示します.これは、元のオブジェクトもconstタイプになったわけではありません.元のオブジェクトでオブジェクトの値を変更し、参照オブジェクトの値を変更する目的を達成することができます.
ふろく GitHub-Blog
a.参照の定義
参照は初期化する必要があります.参照が定義されると、他のオブジェクトを指すことができないため、初期化が必要です.
type & quote_name=var_name;
ただし、リファレンスはリファレンスオブジェクトのアドレスで初期化できません.オブジェクトのアドレスを参照する場合は、ポインタ参照を定義できます.
b.引用の意味
int a=10;
int &b=a;
ここで、bは参照であり、bは実際にはaのアドレスを指しているが、ポインタではなく、参照であり、aの別名であり、aができるbはすべてできる.
2.参照の適用
実際の応用では,参照は主に関数の形式パラメータとして用いられる.リファレンスは、オブジェクトの別名であるオブジェクトのアドレスを内部に格納します.文字列定数や異なるタイプのオブジェクトなどのアドレス不可能な値の場合、コンパイラはリファレンスを実現するために一時オブジェクトを生成する必要があります.リファレンスは実際にオブジェクトを指しますが、ユーザーはアクセスできません.このとき,参照が関数パラメータとして用いられるとconst参照問題が導入される.
3.const引用問題
double dvar=2.12;
int & nvar=dvar; //Wrong
int const& cnvar=dvar; //OK
double & cdqvar=dvar+1.0; //Wrong
double const& cdqvar=dvar+1.0; //OK
double dvar=2.12;
int const& cnvar=dvar;
/// --Beg
int tmp=dvar; //double -> int
int const& cnvar=tmp;
///End
int nvar=100;
int * &pqvar=&nvar; //Wrong , &nvar , const
int * const & pcqvar=&nvar; //OK
int const nvar0=100;
int * &pqref=&nvar0; //Wrong, const
int const * &pcqref=&nvar0; //Wrong, , nvar0 , , nvar0 , pcqref
int const * const &cpcqref=&nvar0; //OK
int const *p = &nvar0;
int const * &ref = p; //OK
注意:定数ポインタとポインタ定数
int a;
int * const p = &a // ,*p :*p = 8;(OK)
//p : p++;(ERROR)
int a,b;
const int *p = &a; // ,*p :*p = 8;(ERROR)
//p : p = &b (OK)
まとめ:
int nvar=100;
int const &ref=nvar;
nvar++; //OK
//ref++; //Wrong
cout<<nvar<<endl<<ref<<endl;
/// :
101
101
ふろく