c++ - 为什么 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 类型,所以这就是它需要两种类型的原因,如果它们都是整数,没有人想过强制第一个参数与第二个参数匹配.
解决方案
推荐阅读
- css - 我可以在 iFrame 中使用 CSS @media 来响应父级的视口宽度吗?
- flutter - Flutter ListView - 如果不扩展超出屏幕,则居中项目
- linux - 按区域运行 Ansible Playbook
- ios - 带有奇怪的长动态链接 url 格式问题的 iOS Firebase 动态链接
- magento - Magento 2.3.5-p1 由于内容安全策略,前端为空白
- reporting-services - Azure 数据库是否支持 SSRS?
- c# - WPF ListView UI 获取新添加的 UI 元素
- python-3.x - 一个字符串元素的列表被转换为字符列表
- java - proguard 规则不适用于某些 Java 文件
- android - 切换片段后切换按钮不改变状态