为什么这样不能实现后置递增?

        reference operator*() { return *_ptr; }  //解引用操作
        array_iterator<T, N>&operator++()       //前置递增
        {                    
            ++**this;    //增加_ptr,
            //当把上面那句改为  ++_ptr后就能实现  这两者的区别是什么?
            return *this;     
        }
        array_iterator<T, N> operator++(int) //后置递增
        {
            array_iterator<T, N> tmp = *this;    //返回量
            ++*this;
            return tmp;
        }

当把++**this;改为 ++_ptr就能实现,这两者有什么区别?
(_ptr是类里的一个成员,为指针类型 T*)

阅读 2.8k
2 个回答

++*this
== ++(this->operator*())
== ++*(this->_ptr)
== ++*_ptr

++*_ptr和++_ptr显然是不一样的,所以题主你的代码当然不能实现愿望。

reference operator() { return _ptr; } //解引用操作
上诉语句返回的是ptr指向的值,
this得到类,该类再调用上面的操作符的时候,得到的是该指针指向的值,所以实际上是修改了指针指向的值而不是指针的值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进