假设我有以下代码:
#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++ 中的工作方式?
编辑:谢谢,我现在明白为什么两者不同了。但是,那么我不应该这样做:
Account GetAccount()
{
return mainAccount;
}
int main()
{
Account &a = GetAccount();
// ....
}
但是,当我运行它时,我收到一个错误:
无标题:在函数“int main()”中:
无标题:31:错误:从“Account”类型的临时变量中“Account&”类型的非常量引用无效初始化</p>