【发布时间】:2018-01-12 10:21:50
【问题描述】:
请考虑以下代码:
struct Foo
{
//some useful unique data
};
std::vector<Foo> foos;
std::vector<Foo>::iterator foo_iter;
//populate with a load of Foo objects.
Foo& getNextFoo()
{
return *foo_iter++;
}
正如您所料,我希望getNextFoo() 做的是取消对迭代器的引用,返回一个引用,然后发布递增迭代器。
我不相信这会奏效,而且我对运算符优先级有点模糊,希望得到一些关于如何实现这一点的指导
【问题讨论】:
-
如果它让你感到困惑,它可能会让其他人感到困惑。我们并非都是运算符优先级专家。两条线有什么问题,让我们这些愚蠢的人很容易追上你?
-
对我来说似乎很好...您是否进行了任何测试,结果出乎意料? @systemcpro 没有简洁的方法可以在单独的语句中执行此操作,因为增量在逻辑上位于 return 语句之后,这在实际的 c++ 代码中当然不会发生
-
也许我也应该在下面的答案中提到括号。这对我来说比查找运算符优先规则更容易阅读。任何真正不依赖于真正了解运算符优先级的私密细节的东西。我们不是专家。
-
编写好的代码是关于它的可维护性。能够在 6 个月内返回并查看它并且不质疑是否存在错误的能力很重要。因此,+1 到 2 行。
-
我最初是在一个更大的项目中编写此代码,但是是的,我编写了一个快速测试程序并且一切正常。我只是不相信它会按照我的想法做。在询问之前不写测试是我的不良做法。