参照型の戻り値で関数定義・参照戻し

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

参照戻し

スポンサーリンク

参照型の宣言は、関数定義値の戻り値にも使用できます。
以下は、配列要素の値から、最大の値を取り出すプログラム。

#include <iostream>
 
int& biggest(int array[], int num) {
    int index;
    int biggest;
 
    // まず、最初の要素が最大と前提
    biggest = 0;
    for (index = 0; index < num; index++) {
        if (array[biggest] < array[index])
            biggest = index;
    }
    
    return (array[biggest]);
}
 
int main() {
    int item_array[5] = {2, 5, 3000, 7, 9};
    std::cout << "Biggest: " << biggest(item_array, 5) << "\n";
    biggest(item_array, 5) = 10;
    std::cout << "Biggest: " << biggest(item_array, 5) << "\n";
}

int& biggest(int array[], int num)と参照の戻り値で関数定義しているので、関数呼び出しを代入文の左辺で利用できます。(lvalues:代入文の左側で使用できる式)
実行結果。

Biggest: 3000
Biggest: 10

もし、参照型の戻り値でなく、int biggest(int array[], int num) と関数定義しますと、戻り値が参照ではなくなりますので、関数呼び出しを代入文の左辺では使えなくなります。
biggest(item_array, 5) = 10;で、エラーが起こりコンパイルできません。

ダングリング参照・ダングリングリファレンス

参照戻しを用いる場合には、存在しない変数を参照してしまう、ダングリング参照に注意する必要があります。
難しいので、もう少し後から勉強します。

スポンサーリンク
 
スポンサーリンク