3

我最近研究了这个weakly_incrementable概念,我想知道后增量运算符有什么好处,因为这个概念没有定义对运算结果的任何要求。

真的可以退货voidoperator++(int)

void operator++(int) { ++(*this); }

它似乎符合该概念的其他要求(例如它不必是可复制的)以及该incrementable概念引入了i++有用的要求这一事实,但在这种情况下,我想知道为什么i++由概念定义全部。毕竟,当你需要一些东西来实现这个weakly_incrementable概念时,你总是可以使用++i而不是i++因为

  1. 你不能依赖i++任何有用的属性,除了那些已经提供的++i但是
  2. i++可能效率更低(例如,当它创建迭代器的副本时)。
4

1 回答 1

4

该设计决定记录在P0541中。

真的可以退货voidoperator++(int)

是的。这是。如论文所述,进行了一次具体的民意调查。

还考虑了完全删除后缀增量,但是:

Ranges TS 的作者强烈倾向于为输入迭代器保留后缀增量运算符。考虑以下相当常见的(反)模式:

for (auto i = v.begin(); i != v.end(); i++) {
// ...
}

除了担心后增量的成本之外,这段代码本身并没有什么问题,作者认为没有令人信服的理由来破坏它。通过允许i++return void,我们实际上可以缓解性能问题。

于 2020-11-16T12:55:06.523 回答