post 递增 weakly_incrementable 的有用性?
Usefulness of post-incrementing a weakly_incrementable?
我最近研究了 weakly_incrementable
概念,我想知道 post-increment operator 有什么用,因为该概念没有定义对操作结果的任何要求。
return void
operator++(int)
真的可以吗?
void operator++(int) { ++(*this); }
它似乎符合该概念的其他要求(例如它不必是可复制的)并且还符合 incrementable
概念引入的要求使 i++
有用的事实,但在那种情况下,我想知道为什么 i++
完全由这个概念定义。毕竟,当你需要一些东西来实现 weakly_incrementable
概念时,你总是可以使用 ++i
而不是 i++
因为
- 你不能指望
i++
有任何有用的属性,除了 ++i
已经提供的属性,但是
i++
可能效率更低(例如,当它创建迭代器的副本时)。
该设计决策记录在 P0541 中。
Is it actually okay to return void
for operator++(int)
?
是的。这是。如论文所述,进行了一次特定的民意调查。
也考虑过完全删除后缀增量,但是:
The authors of the Ranges TS strongly prefer keeping the postfix
increment operator for input iterators. Consider the following fairly
common (anti-)pattern:
for (auto i = v.begin(); i != v.end(); i++) {
// ...
}
Aside from concerns over the cost of post-increment, there is nothing wrong with this code per se, and the authors see no
compelling reason to break it. And by permitting i++
to return void
,
we would actually be mitigating the performance problem.
我最近研究了 weakly_incrementable
概念,我想知道 post-increment operator 有什么用,因为该概念没有定义对操作结果的任何要求。
return void
operator++(int)
真的可以吗?
void operator++(int) { ++(*this); }
它似乎符合该概念的其他要求(例如它不必是可复制的)并且还符合 incrementable
概念引入的要求使 i++
有用的事实,但在那种情况下,我想知道为什么 i++
完全由这个概念定义。毕竟,当你需要一些东西来实现 weakly_incrementable
概念时,你总是可以使用 ++i
而不是 i++
因为
- 你不能指望
i++
有任何有用的属性,除了++i
已经提供的属性,但是 i++
可能效率更低(例如,当它创建迭代器的副本时)。
该设计决策记录在 P0541 中。
Is it actually okay to return
void
foroperator++(int)
?
是的。这是。如论文所述,进行了一次特定的民意调查。
也考虑过完全删除后缀增量,但是:
The authors of the Ranges TS strongly prefer keeping the postfix increment operator for input iterators. Consider the following fairly common (anti-)pattern:
for (auto i = v.begin(); i != v.end(); i++) { // ... }
Aside from concerns over the cost of post-increment, there is nothing wrong with this code per se, and the authors see no compelling reason to break it. And by permitting
i++
to returnvoid
, we would actually be mitigating the performance problem.