weakly_incrementable 使用 iota_view 时的约束
weakly_incrementable constraint while using iota_view
要快速创建一个类似于 python 的 for i in range(100)
的 for 循环,我可以这样做:
for (auto const i : std::views::iota(0, 100))
{ /* ... */ }
但是,CLion 警告我向我的 auto
添加一个 std::weakly_incrementable
约束:
for (std::weakly_incrementable auto const i : std::views::iota(0, 100))
{ /* ... */ }
我知道 iota_view
的起始值必须是 weakly_incrementable
,并且我假设 auto i
将创建一个与起始值。
但这是真的吗?它是否有可能创建完全不同类型的东西(甚至不能弱增量)?我可以安全地忽略警告吗?
Is it possible for it to create something of a totally different type
(not even weakly incrementable)? And can I safely ignore the warning?
根据[range.iota.view]中iota_view
的提要:
template<weakly_incrementable W, semiregular Bound = unreachable_sentinel_t>
class iota_view : public view_interface<iota_view<W, Bound>> {
//...
};
已经约束W
必须是weakly_incrementable
。由于 iota_view::iterator::operator*()
returns 与 W
类型相同,您可以忽略此警告。
要快速创建一个类似于 python 的 for i in range(100)
的 for 循环,我可以这样做:
for (auto const i : std::views::iota(0, 100))
{ /* ... */ }
但是,CLion 警告我向我的 auto
添加一个 std::weakly_incrementable
约束:
for (std::weakly_incrementable auto const i : std::views::iota(0, 100))
{ /* ... */ }
我知道 iota_view
的起始值必须是 weakly_incrementable
,并且我假设 auto i
将创建一个与起始值。
但这是真的吗?它是否有可能创建完全不同类型的东西(甚至不能弱增量)?我可以安全地忽略警告吗?
Is it possible for it to create something of a totally different type (not even weakly incrementable)? And can I safely ignore the warning?
根据[range.iota.view]中iota_view
的提要:
template<weakly_incrementable W, semiregular Bound = unreachable_sentinel_t>
class iota_view : public view_interface<iota_view<W, Bound>> {
//...
};
已经约束W
必须是weakly_incrementable
。由于 iota_view::iterator::operator*()
returns 与 W
类型相同,您可以忽略此警告。