C++参照を返す関数

10677 ワード

参照で関数値を返すには、関数定義のフォーマットは次のとおりです.
タイプ識別子&タイプ名(パラメータリストおよびタイプ説明)
{関数体}
constで参照を限定する宣言は、次のとおりです.
constタイプ識別子&参照名=ターゲット変数名;
このように宣言された参照は、参照によってターゲット変数の値を変更することはできず、参照のターゲットをconstとし、参照の安全性を保証します.
注意点:
  • 参照で関数値を返すには、関数を定義するときに関数名に&を付ける必要があります.
  • 参照で関数値を返す最大の利点は、メモリに返される値のコピーが生成されないことです.一方、通常の戻り値で関数の関数値を返す場合は、メモリに一時変数を作成し、変調関数が返されると、関数値をその一時変数にコピーし、主変調関数はその一時変数の値で演算する必要があります.
  • 参照の使用では、単純にある変数に別名を付けることは意味がなく、参照の目的は主に関数パラメータ伝達において大きなオブジェクトの伝達効率と空間の望ましくない問題を解決することである.
  • 参照伝達関数のパラメータは、パラメータ伝達においてコピーが生成されず、伝達の効率が向上することを保証し、constの使用により、参照伝達の安全性を保証することができる.
  • 参照とポインタの違いは、ポインタがあるポインタ変数によって1つのオブジェクトを指した後、その指す変数に対して間接的に操作され、プログラムでポインタを使用してプログラムの可読性が悪いことである.参照自体がターゲット変数の別名であり、参照に対する操作はターゲット変数に対する操作である.
  • 一般的に、付与式の左側は変数名のみであり、すなわち、付与されたオブジェクトは変数でなければならない.子供に変数があるため、定数または式は付与できないが、関数の戻り値が参照である場合、付与番号の左側は関数の呼び出しであってもよい.

  • 私は独学で、教材は少し古いかもしれなくて、问题があるならみんなに指摘してもらいます!!!ありがとう!
    例題:
  • 一般的な関数を定義し、戻り値のメソッドを使用して関数値を返し、別の関数を定義参照メソッドを使用して関数値
  • を返す.
     
     1 #include<iostream>
    
     2 using namespace std;
    
     3 
    
     4 
    
     5 int f1(int a);
    
     6 int &f2(int a);
    
     7 
    
     8 int f1(int a)
    
     9 {
    
    10     int num;
    
    11     num = a*10;
    
    12     return num;
    
    13 }
    
    14 
    
    15 int &f2(int a)
    
    16 {
    
    17     int num;
    
    18     num = a*20;
    
    19     return num;
    
    20 }
    
    21 
    
    22 int main()
    
    23 {
    
    24     int a,b;
    
    25     a=f1(1);
    
    26     b=f2(2);
    
    27     cout << f1(4) << endl;
    
    28     cout << f2(5) << endl;
    
    29     cout << a << endl;
    
    30     cout << b << endl;
    
    31     //int &ra=f1(3);             ,(  C++       )
    
    32     int &rb=f2(3);
    
    33     cout << rb << endl;
    
    34     return 0;
    
    35 }

     
     
     
  • は、代入式の左値
  • として参照を返す関数値を用いる.
     1 #include<iostream>
    
     2 using namespace std;
    
     3 
    
     4 int &put(int n); 
    
     5 int vals[10];
    
     6 int error=-1;
    
     7 
    
     8 
    
     9 int &put(int n)
    
    10 {
    
    11     if(n>=0 && n<=9)
    
    12         return vals[n];
    
    13     else
    
    14     {   
    
    15         cout << "error!" << endl;
    
    16         return error;
    
    17     }   
    
    18 }
    
    19 
    
    20 int main()
    
    21 {
    
    22     put(0)=10;
    
    23     put(9)=20;
    
    24     cout << vals[0] << endl;
    
    25     cout << vals[9] << endl;
    
    26     return 0;
    
    27 }

     
     
  • const限定参照
  • を用いる
     1 include<iostream>
    
     2 using namespace std;
    
     3 
    
     4 int &fn(const int &a) 
    
     5 {
    
     6     //a=32;   !       
    
     7     int b=a;
    
     8     return b;   //    a,    
    
     9 }
    
    10 
    
    11 int main()
    
    12 {
    
    13     int &a = fn(32);
    
    14     cout << a << endl;
    
    15     return 0;
    
    16 }
    
    17 
    
    18 //  ,       ,           !!!  !!!

     
     
     
    私は独学で、教材は少し古いかもしれなくて、问题があるならみんなに指摘してもらいます!!!ありがとう!