参照型の引数で関数定義

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

参照型の変数は、関数の引数や関数の戻り値で宣言してやると、上手く活用できる場合があります。

スポンサーリンク

#include <iostream>
 
// カウントアップ。だが上手く動かない
void increment(int count) {
    ++count;
}
 
int main() {
    int num = 0;
    increment(num);
    std::cout << num << "\n";    // 1を期待したが・・・
    return (0);
}

上記コードは、カウントを1つアップするincrement関数を定義し、それを呼び出すことで、「1」が表示されることを期待したプログラムです。
しかし、実行結果は・・・

0

0のままで、期待したとおりの動作とはなっていません。
これは、C++がデフォルトで引数の渡し方が、値渡し(値をコピーして渡す)になっているからです。
つまり、countにnumの値がコピーされて(int count = num;)、countは1カウントアップするが、numは0のままとなっているからです。

期待した動作を得るには、以下のように引数を参照型とします。

#include <iostream>
 
// カウントアップ。今度は動く
void increment(int& count) {
    ++count;
}
 
int main() {
    int num = 0;
    increment(num);
    std::cout << num << "\n";    // 1を出力
    return (0);
}

実行結果。

1

今度は、int& count = num; と参照で渡されるため、期待した結果が得られます。

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