- ranges[meta header]
- std::ranges[meta namespace]
- class template[meta id-type]
- cpp23[meta cpp]
namespace std::ranges {
template<view V>
requires input_range<V>
class as_const_view : public view_interface<as_const_view<V>> { …… }; // (1)
namespace views {
inline constexpr /*unspecified*/ as_const = /*unspecified*/; // (2)
}
}
- input_range[link input_range.md]
- view[link view.md]
- view_interface[link view_interface.md]
- (1): 各要素を定数化したRangeとして振る舞う
view
- (2):
as_const_view
を生成するRangeアダプタオブジェクト
borrowed |
sized |
output |
input |
forward |
bidirectional |
random_access |
contiguous |
common |
viewable |
view |
※ |
※ |
|
○ |
※ |
※ |
※ |
※ |
※ |
○ |
○ |
- (2): 式
views::as_const(E)
の効果は次のいずれか(T = decltype((E))
、U = remove_cvref_t<T>
とする)
views::all_t<T>
がconstant_range
のモデルとなる場合 : views::all(E)
- 任意の型
X
に対して、U
がempty_view<X>
である場合 : auto(views::empty<const X>)
- 任意の型
X
と整数値Extent
に対して、U
がspan<X, Extent>
である場合 : span<const X, Extent>(E)
- 任意の型
X
に対して、U
がref_view<X>
であり、const X
がconstant_range
のモデルとなる場合 : ref_view(static_cast<const X&>(E.base()))
E
が左辺値であり、const U
がconstant_range
のモデルとなり、かつU
はview
のモデルとならない場合 : ref_view(static_cast<const U&>(E))
- それ以外の場合 :
as_const_view(E)
#include <ranges>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4};
for (auto& i : vec | std::views::as_const) {
std::cout << i << ' ';
// 変更不可
//i = 0
}
}
- views::as_const[color ff0000]