gpt4 book ai didi

c++ - 迭代器重载成员选择与间接运算符

转载 作者:行者123 更新时间:2023-11-28 02:06:43 25 4
gpt4 key购买 nike

所以为了创建一个 Minimal. Complete, Verifiable Example我在这里创建了一个玩具 iterator(我知道它并不完美,它只是为了问一个问题):

class foo : public iterator<input_iterator_tag, string> {
string _foo;
static const size_t _size = 13;
public:
const string& operator*() { return _foo; }
const foo& operator++() {
_foo += '*';
return *this;
}
const foo operator++(int) {
auto result = *this;
_foo += '*';
return result;
}
bool operator==(const foo& rhs) { return _foo.empty() != rhs._foo.empty() && _foo.size() % _size == rhs._foo.size() % _size; }
bool operator!=(const foo& rhs) { return !operator==(rhs); }
};

我读到一个InputIterator需要定义成员选择运算符。间接运算符是有道理的,但成员选择运算符在这里让我感到困惑。如何为 foo 实现成员选择运算符?

最佳答案

const string* operator->() const { return &_foo; }

示例用法:

foo i;
++i;
assert(i->length() == 1);

它的工作方式是,编译器将生成对 operator-> 的重复调用,直到返回类型是原始指针(因此在这种情况下,只需调用一次 foo::operator ->),然后对该指针执行常规成员选择操作。

关于c++ - 迭代器重载成员选择与间接运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37191290/

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