我在这里做错了什么(在C++中引用)?

m4d*_*ign 5 c++ reference

我一直在玩引用(我在这方面仍有问题).

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)

这是正确/足够吗?

Ara*_*raK 5

第一个是正确的.

对于第二个,有无限数量的解决方案:),但这将是我的:

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)