我编译了以下示例:
#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;
}
from cplusplus.com/reference http://www.cplusplus.com/reference/std/iterator/iterator/我收到编译器警告:
iterator.cpp: In member function 'myiterator& myiterator::operator++(int)':
iterator.cpp:13: warning: reference to local variable 'tmp' returned
这是怎么回事?后缀签名应该是myiterator operator++(int)
即按值返回?
是否有某个地方定义了 STL 迭代器上的后缀签名应该是什么样子?
是否有某个地方定义了 STL 迭代器上的后缀签名应该是什么样子?
标准。
标准规定了这样的事情。在这种操作的情况下,标准基本上说“你必须返回可转换为const X&
" where X
是迭代器。实际上,这意味着如果这适用于您(不适用),您可以按引用返回,或者按值返回。
见24.1.3/1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)