gpt4 book ai didi

c++ - 实现 C++ 后缀增量运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:52 25 4
gpt4 key购买 nike

我编译了下面的例子:

#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) 即按值返回?

是否有某个地方定义了 STL 迭代器上的后缀签名应该是什么样子?

最佳答案

Is there somewhere defined what the postfix signature should look like on STL iterators?

标准。

标准规定了这些事情。对于此操作,标准基本上说“您必须返回可转换为 const X& 的内容”,其中 X 是迭代器。在实践中,这意味着您可以通过引用返回(如果适用)或按值返回。

参见 24.1.3/1

关于c++ - 实现 C++ 后缀增量运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4347661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com