次のコードがあるとします。
#include <iostream>
using namespace std;
class Account
{
private:
float balance;
public:
Account() { balance = 0.0; };
float GetBalance() { return balance; };
void SetBalance(float newBalance) { balance = newBalance; };
};
Account mainAccount;
Account& GetAccount()
{
return mainAccount;
}
void PrintAccountInfo()
{
cout << "mainAccount's balance is " << mainAccount.GetBalance() << endl;
}
int main()
{
PrintAccountInfo();
Account &a = GetAccount(); // Line 31
a.SetBalance(30.0);
PrintAccountInfo();
return 0;
}
実行すると、次の出力が得られます (予想どおり)。
mainAccount's balance is 0
mainAccount's balance is 30
しかし、31行目の「Account &a」の「&」を外すと、こうなります。
Account a = GetAccount(); // note lack of "&"
私はこの出力を得ます:
mainAccount's balance is 0
mainAccount's balance is 0
どうして?参照を返すとき、「&」は冗長/不要だと思いましたか? C++ で参照がどのように機能するかを根本的に誤解していますか?
編集: ありがとうございます。なぜこの 2 つが違うのか理解できました。しかし、私はこれを行うことができないはずです:
Account GetAccount()
{
return mainAccount;
}
int main()
{
Account &a = GetAccount();
// ....
}
ただし、それを実行すると、エラーが発生します。
無題: 関数 'int main()' 内:
untitled:31: エラー: タイプ 'Account' のテンポラリからのタイプ 'Account&' の非 const 参照の無効な初期化</p>