я составил следующий пример:реализации C++ постфикса оператор инкремента
#include <iostream>
#include <iterator>
using namespace std;
class myiterator : public iterator<input_iterator_tag, int>
{
int* p;
public:
myiterator(int* x) :p(x) {}
myiterator(const myiterator& mit) : p(mit.p) {}
myiterator& operator++() {++p;return *this;}
myiterator& operator++(int) {myiterator tmp(*this); operator++(); return tmp;}
bool operator==(const myiterator& rhs) {return p==rhs.p;}
bool operator!=(const myiterator& rhs) {return p!=rhs.p;}
int& operator*() {return *p;}
};
int main() {
int numbers[]={10,20,30,40,50};
myiterator beginning(numbers);
myiterator end(numbers+5);
for (myiterator it=beginning; it!=end; it++)
cout << *it << " ";
cout << endl;
return 0;
}
из cplusplus.com/reference и я получаю предупреждение компилятора:
iterator.cpp: In member function 'myiterator& myiterator::operator++(int)':
iterator.cpp:13: warning: reference to local variable 'tmp' returned
Что случилось здесь? Предполагается, что постфиксная подпись должна быть myiterator operator++(int)
i.e. return by value?
Есть ли какие-то определения, как должна выглядеть подпись postfix на итераторах STL?
cplusplus.com полезен, но не является авторитетным. В этом случае тебе больно. Если вы посмотрите на фактический STL-код, вы обнаружите, что итератор часто возвращается значением, которое cplusplus.com не сказал вам, что вы можете это сделать. – 2010-12-03 16:39:28
http://stackoverflow.com/questions/3181211/prefix-postfix-increment-operators – 2015-06-17 10:22:35