首页 > 解决方案 > 为什么 iota_view 允许不同的整数模板参数?

问题描述

我有以下损坏的代码,据我所知,这里的问题是iota(0, n) 返回我 aiota_view<int,int64>然后显然 int 永远不能是大于INT_MAX. 简单的解决方法是只使用iota(0LL, n),但这似乎容易出错。

int main() {
  const int64_t n = 16LL*1024*1024*1024;
  auto ints = std::ranges::views::iota(0, n) |
              std::views::transform([](int64_t x) { return x * 10; });
  for (int64_t lookup : {49LL, 50LL, 51LL}) {
    const auto it = std::ranges::lower_bound(ints, lookup);
    if (it != ints.end()) {
      std::cout << *it << std::endl;
      std::cout << *it.base() << std::endl;
    }
  }
}

我最好的猜测是iota_view想要使用“奇怪”的第二种类型,比如某种 +INF 类型,所以这就是它需要两种类型的原因,如果它们都是整数,没有人想过强制第一个参数与第二个参数匹配.

标签: c++c++20std-ranges

解决方案


推荐阅读