C+++初心者ガイド+第六編(5)


転載は出典を明記してください.http://blog.csdn.net/zhangxingping
必須スキル6.5:リファレンスを返す    C++では、関数は参照を返すことができます.関数の戻り参照にはいくつかの使い方がありますが、そのうちのいくつかは本書の後で説明します.ここではその一部について説明します.    関数が参照を返す場合、関数は実際に戻り値を指すポインタを暗黙的に返します.これにより、関数は付与文の左側に表示されます.たとえば、次のプログラムがあります.
//      
#include <iostream>
using namespace std;
double &f(); //  f()    
double val = 100.0;
int main()
{
    double x ;
    cout << f() << '
'; // val x = f(); // val x cout << x << '
'; // x f() = 99.1; // val cout << f() << '
'; // val return 0; } double &f() { return val; // val }

プログラムの出力は次のとおりです.
100,10099.1上記の手順をよく検討してみましょう.プログラムの開始時に、関数f()はdoubleタイプの参照を返すように宣言され、グローバル変数valは100に初期化される.main()関数では、cout<// #include <iostream> using namespace std; double &change_it(int i); // double vals[] = { 1.1, 2.2, 3.3, 4.4, 5.5 }; int main() { int i; cout << "Here are the original values: "; for ( i = 0; i < 5; i++) { cout << vals[i] << ' '; } cout << '
'; change_it(1) = 5298.23; // change_it(3) = -98.8; // cout << "There are the changed values: "; for ( i = 0; i < 5; i++) { cout << vals[i] << ' '; } cout << '
'; return 0; } double &change_it(int i) { return vals[i]; // i }

プログラムは、参照を返す関数を使用して、配列の2番目と4番目の要素の値を変更します.出力は以下の通りです.Here are the original values:1.1 2.2 3.3 4.4 5.5 There are the changed values:1.1 5298.23 3.3-98.8 5.5この点がどのように実現されているかを見てみましょう.関数change_itはdoubleタイプ参照を返すと宣言されます.より明確には、配列valsのi番目の要素への参照を返します.main()関数では、この参照は付与文で要素に付与されます.    リファレンスを返すときは、返されるオブジェクトがその作用範囲を超えてはいけないことに注意してください.たとえば、次のプログラムがあります.
//  !              
int &f()
{
    int i = 10;
    return i; //  !   f()   ,i         
}
上記の関数f()では、関数が返されると、局所変数iはその役割ドメインを超えてしまう.したがって、iに対する参照は定義されません.実際、一部のコンパイラは、上述した理由から、関数f()をコードに書かれたようにコンパイルしない.しかしながら、この問題は間接的に引き起こされ、どのオブジェクトへの参照を返すべきかを慎重に処理しなければならない.