struct Complex
{
int real;
int imaginary;
};
ostream& operator<<(ostream& output, const Complex& temp)
{
output << temp.real << " + " << temp.imaginary << 'i' << endl;
return output;
}
Complex& operator+(Complex& c1, Complex& c2)
{
Complex ans;
ans.real = c1.real + c2.real;
ans.imaginary = c1.imaginary + c2.imaginary;
return ans;
}
int main()
{
Complex temp;
cin >> temp;
Complex temp2;
cin >> temp2;
Complex ans;
ans = temp + temp2;
cout << ans << endl;
return 0;
}
1 2
1 2
出力
2 + 4i
-858993460 + -858993460i
私はC++に新たなんだと私はいくつかのプログラム をコード化haved私は結果についてとても困惑していますこのプログラムのC++に関する私の知識に間違っていることを説明してください。助けをありがとう
参照型eの戻り値を持つ関数でローカル変数を返すことは、未定義の動作です。 – marcinj
'operator +'はローカル変数への参照を返します。関数が返ってくると、変数はスコープから外れてしまい、参照が使用される前にぶら下がってしまいます。次に、プログラムは、オブジェクトの存続期間が終了した後にオブジェクトにアクセスすることによって、未定義の動作を示します。代わりに値で返します。 –
あなたの現在の知識がわからないので、質問は明確ではありません。静的にコードを分析する:@IgorTandetnikで述べたように、関数定義されていない振る舞いである関数ローカルオブジェクトへの参照を返します。 – MABVT