1. ホーム
  2. c++

[解決済み] int 型の一時的なものから int& 型の非恒等式参照への無効な初期化

2022-02-16 11:56:41

質問

#include<iostream>
using namespace std;

int fun(int &x)
{
    return x;
}
int main()
{
    cout << fun(10);
    return 0;
}

どなたかエラーの原因を教えてください。

ありがとうございます。

解決方法は?

10 は定数なので、定数を変更するという概念自体が奇妙なため、単純に参照を渡すことはできません。

参照は、C言語(およびそれ以前のC++)の厄介な問題の1つである、すべてが値で渡され、変更を呼び出し元に反映させたい場合は、ポインタを渡して、実際の変数を取得するために関数内でそのポインタを参照解除しなければならない(読み取りや書き込みのために)、という事実を解決するために導入されました。

となるものです。 マジで 次のISO C規格に盛り込まれると良いですね。ポインターを使わなければならないのは、Stack Overflowでは評判が良くても、世界のCプログラマーにとってはあまり良いことではありません :-)。

問題の解決方法は簡単です。もしあなたが しない は関数内で変更する必要がないので、普通に渡してください。

int fun (int x) { ... }

もし、あなたが する を変更する必要がある場合は、次のようなものを渡す必要があります。 できる が変更される。

int xyzzy = 10;
cout << fun (xyzzy);