「C++プロパティ」の参照タイプ

3269 ワード

まず、いくつかの概念を見てみましょう.
引用、C++特有です;オブジェクトが定義されているに違いありません.参照を定義すればいいです.参照は元のオブジェクトと同じメモリを共有し、実際には同じオブジェクトであり、1つの変更は別の変更を引き起こします.
宣言は、変数またはオブジェクトをプログラムの開始時に導入するだけで、オブジェクトまたは変数が定義されていないエラーが発生しないように、後で使用することを説明します.
定義、これは実質的な内容が要求され、変数の宣言と定義フォーマットは基本的に同じですが、関数は異なります.ここでは関数体、すなわち実装コードを与えなければなりません.
まず例を見てみましょうcpp
#include <stdio.h>
int main(){
  int b; b = 5;
  int &a = b;
  printf("a is %d
",a); a = 10; printf("b is %d
",b); return 0; }
g++ -o test test.cpp
出力結果:
a is 5
b is 10

同様の機能は、Cでは以下のように実現する:test.c
#include <stdio.h>
int main(){
  int b; b = 5;
  int *a = &b;
  printf("*a is %d
",*a); *a = 10; printf("b is %d
",b); return 0; }

gcc -o test test.c
結果:
*a is 5
b is 10

二、見どころは少し複雑です.test 1.cpp
#include <stdio.h>
int swap(int &a,int &b) /*     a,b   &          */
{
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
    return 0;
}
int main()
{
    int a,b;
    printf("Enter a and b:");
    scanf("%d,%d",&a,&b);
    printf("a = %d,b = %d
",a,b); swap(a,b); printf("a = %d,b = %d
",a,b); return 0; }
g++ -o test1 test1.cpp
同じ機能のCは以下の通りである、test 1.c
#include <stdio.h>
int swap(int *a,int *b) /*     a,b   &          */
{
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
    return 0;
}
int main()
{
    int a,b;
    printf("Enter a and b:");
    scanf("%d,%d",&a,&b);
    printf("a = %d,b = %d
",a,b); swap(&a,&b); printf("a = %d,b = %d
",a,b); return 0; }
gcc -o test1 test1.c
====================================================================================================================================
注意:参照タイプC+、eg:int bを宣言します.int &a = b;これはC++だけで機能します.
同じ機能はCで実現され、eg:int b;int *a = &b;.
説明:上記の機能は、aとbが同じ変数を指すようにするためです.
三、理論を見る
1.引用はC++の特性であり、C言語にはない.
2.参照は別名であり、データ型ではなく、記憶領域を割り当てず、ただのメカニズムである.
3.参照はターゲットの別名として使用され、参照の変更は実際にはターゲットの変更である.
4.C++において、定義は記憶領域を割り当てる意味を含み、参照は宣言のみであり、定義されていない.
5.参照を宣言する前に、接続されたターゲットが宣言または定義されていることを要求します.
例えば、int a;
   int &b=a;//aはすでに宣言または定義された変数であるべきである.
6.参照は宣言時に初期化されなければならない.そうしないとコンパイルエラーが発生する.
7.C++は参照自体のアドレスにアクセスする方法を提供していない.プログラムが参照のアドレスを探している場合、その参照先のアドレスしか見つからない.引用が初期化されると、一定の目標に維持され、二度と離れない.
8.参照はポインタと大きく異なり、ポインタは変数であり、他の場所を指すアドレスに再付与することができるが、参照を確立するときは初期化しなければならず、他の変数には決して関連しない.
9.参照自体はデータ型ではないので、参照の参照も参照のポインタもありません.
10.空のポインタがあり、空の参照がない.
参照とポインタの類似点:
1.パラメータを渡すことができ、同時に、関数の作用ドメイン内で変数とオブジェクトのコピーを確立する必要がなく、空間を節約することができる.
2.関数は1つの値しか返されません.プログラムが2つの値を返す必要がある場合は、参照またはポインタを使用してパラメータを渡し、ターゲットに正しい値を入力します.なぜなら、参照またはポインタを使用して、関数が実際に複数の値を返すことができるように、関数が元のターゲットを変更することを許可するからである.
まとめ:参照は主に関数パラメータの伝達に用いられ、大きなオブジェクトの伝達効率と空間の望ましくない問題を解決する.パラメータ伝達中にコピーが発生しないことを確保し、ポインタの威力を発揮し、伝達の効率を高めるとともに、constの参照を使用することで、参照伝達の安全を確保することができる.
また、C言語にはboolタイプはなく、C++にしかありません.
まとめ:実はC++の中の引用は1つの固定アドレスしか指さすことができないポインタです!