我一直在玩引用(我在这方面仍有问题).
1-我想知道这是否是可接受的代码:
int & foo(int &y)
{
return y; // is this wrong?
}
int main()
{
int x = 0;
cout << foo(x) << endl;
foo(x) = 9; // is this wrong?
cout << x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
2-这也来自考试样本:
Week & Week::highestSalesWeek(Week aYear[52])
{
Week max = aYear[0];
for(int i = 1; i < 52; i++)
{
if (aYear[i].getSales() > max.getSales())
max = aYear[i];
}
return max;
}
Run Code Online (Sandbox Code Playgroud)
它询问此代码中的错误,以及如何修复它.
我的猜测是它返回一个本地引用.修复是:
Week & max = aYear[0];
Run Code Online (Sandbox Code Playgroud)
这是正确/足够吗?
第一个是正确的.
对于第二个,有无限数量的解决方案:),但这将是我的:
Week Week::highestSalesWeek(Week aYear[52]) // return a copy of the week
{
Week max = aYear[0];
for(int i = 1; i < 52; i++)
{
if (aYear[i].getSales() > max.getSales()) max = aYear[i];
}
return max;
}
Run Code Online (Sandbox Code Playgroud)
如果max是引用,则每次执行时都会修改aYear的第一个元素:
max = aYear[i]
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用指针返回对周的引用:
Week & Week::highestSalesWeek(Week aYear[52])
{
Week* max = &aYear[0];
for(int i = 1; i < 52; i++)
{
if (aYear[i].getSales() > max->getSales()) max = &aYear[i];
}
return *max;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |