输入迭代器 - 星号和后缀运算符
Input Iterator - Star and Postfix-Operator
在输入迭代器*it++
上执行此操作是否有效?
我对代码的理解如下,它取消引用迭代器并给我值,然后向前一步。
在 c++ 引用中,* 运算符低于后缀运算符:http://en.cppreference.com/w/cpp/language/operator_precedence
但我读到这种风格是不好的做法。为什么?
在输入迭代器
*it++
上执行此操作是否有效?
是的,这是有效的。 迭代器将递增,返回其先前的值,并且您将取消引用返回的迭代器。
但我读到这种风格是不好的做法。为什么?
考虑一下我刚刚从我不久前编写的一些图形代码中提取的这两个实现:
// Pre-increment
BidirectionalIterator& operator++()
{
edge = (edge->*elem).next;
return *this;
}
// Post-increment
BidirectionalIterator operator++(int)
{
TargetIterator oldval(list, edge);
edge = (edge->*elem).next;
return oldval;
}
请注意,对于后增量,我需要首先构造一个新的迭代器来存储将返回的先前值。
如果编写程序以使用预增量简单明了,则可能会有更好的性能,编译器要做的工作量更少,或者两者兼而有之。
只是不要为此发疯(例如,重写所有循环)! 这可能是微优化。 但是,人们说这是好做法的原因是,如果您养成了使用预增量作为默认值的习惯,那么默认情况下您会获得(可能)更好的性能。
相关文章:
- 增量运算符与后缀混淆
- C++编译器如何扩展前缀和后缀运算符++()?
- 指向重载前缀和后缀运算符中的类对象的指针
- 输入迭代器 - 星号和后缀运算符
- 后缀运算符链表泛型节点迭代器
- 如何使用虚拟后缀运算符解决切片问题
- 前缀和后缀运算符 C++
- 后缀运算符不应该被视为二元运算符吗
- 虚拟参数在后缀运算符重载中的用途?C++
- while 循环中的后缀运算符
- 如何计算前缀和后缀运算符的组合
- C++ 重载'--'后缀运算符
- 前缀和后缀运算符的奇怪行为
- 流插入与后缀运算符相结合
- c++抽象基类后缀运算符
- 重载后缀运算符++
- 为什么要避免C++中的后缀运算符
- 后缀运算符重载顺序
- 是否允许使用后缀运算符++命名参数
- 重载后缀运算符不起作用