在 std::views::iota 上取消引用 end() 是否合法?

问题描述 投票:0回答:1

我发现一些代码从 iota_view 取消引用 end() 。

我向作者询问了这一点,他们指出,Bound 和 W 类型相同的 iota_view 的 end() 是 iterator{bound},而迭代器的 operator* 只是返回其值。所以这不是 UB 并且完全没问题。

我已经确认了 cppreference 上的观点(假设这一切都是正确的)并且它似乎有效:https://godbolt.org/z/Yv7YPhv3G

#include <ranges>
#include <iostream>

int main() {
    auto range = std::views::iota(0, 5);
    std::cout << *range.end() << std::endl;

    return 0;
}

那么这合法吗?取消引用 end() 感觉很奇怪。

c++20 std-ranges
1个回答
-2
投票

您可以通过示例在这里找到答案 https://youtu.be/ZLkbvEUht-o?feature=shared

© www.soinside.com 2019 - 2024. All rights reserved.