【发布时间】:2015-09-22 15:56:04
【问题描述】:
这让我很困惑,我正在实现一个自定义迭代器,我在这里读到:http://en.cppreference.com/w/cpp/concept/InputIterator,*iter++ 的行为应该首先使用取消引用运算符,然后递增返回值(被复制),乘以 1。
我在自定义迭代器中覆盖了operator* 和operator++(int v),问题是当我执行operator* 时operator++(int v) 在operator* 之前被调用,这是正确的行为,但不适用于我想做(我猜?)。
如果你阅读链接,你会看到在表格的最后一行,据说如果你执行*iter++,你的实现应该首先取消引用,然后增加结果,这不是什么是默认行为。
我似乎真的不知道该怎么做,有什么想法吗?
明白答案后,标题有误导,见谅!
谢谢,
约翰
【问题讨论】:
-
这是正确的行为
-
@PaoloM 首先,我是 C++ 初学者,所以让我提前为此道歉。什么是正确的行为?我的代码做什么或网站说什么?如问题所述,他们做不同的事情。
-
正确的行为是
operator++在operator*之前被调用。这是标准的运算符优先级。 -
是的@PaoloM,问题是如何改变它,抱歉不清楚。
-
你不能改变运算符的优先级,即使你可以,你当然也不应该。这会导致可怕的误导性代码。