gpt4 book ai didi

c++ - 为什么简单的迭代器不可读?

转载 作者:行者123 更新时间:2023-12-01 14:48:18 26 4
gpt4 key购买 nike

这段代码不能用 range-v3 编译0.10.0 (或使用 master )。它确实用 range-v3 编译0.9.1 .

#include "range/v3/all.hpp"

struct double_it {
using value_type = double;
double x;
double& operator*() { return x; }
const double& operator*() const { return x; }
};
static_assert(ranges::readable<double_it>);

哪个版本是正确的?在 master , 一个类型 Ireadable仅当same_as<iter_reference_t<I const>, iter_reference_t<I>> .我不明白为什么 operator* 的返回类型应与 operator* const 中的一个相同.

注意:问题已提交到 github here .

最佳答案

看看P1878 ,其中包含此后期设计更改的所有基本原理。迭代器代表间接。在 C++ 中,const-ness 很浅,这意味着它不遵循间接寻址。无论您取消引用 int* 还是 int*const,返回的结果都是相同的:int&。顶级 const 没有——也不应该——重要。迭代器和指针一样。他们必须这样做,因为指针是迭代器概念的有效模型。

为了使这种区别更加明确,在 C++20 中,readable 概念被称为 indirectly_readable

TL;DR:不要使迭代器的引用类型依赖于迭代器本身的 const 特性。

关于c++ - 为什么简单的迭代器不可读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60996431/

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