std::ranges::view_interface<D>::data
來自 cppreference.com
< cpp | ranges | view interface
constexpr auto data() requires std::contiguous_iterator<ranges::iterator_t<D>>; |
(1) | (C++20 起) |
constexpr auto data() const requires ranges::range<const D> && |
(2) | (C++20 起) |
data()
成員函式的預設實現透過 std::to_address 獲取起始迭代器所指向的地址,當檢視非空時,該地址也是派生型別檢視所引用的連續儲存(由 contiguous_iterator
暗示)的最低地址。
2) 同 (1),但
derived
為 static_cast<const D&>(*this)。目錄 |
[編輯] 引數
(無)
[編輯] 返回值
起始迭代器所指向的地址。
[編輯] 註解
以下派生型別可以使用 data()
的預設實現
- std::ranges::common_view
- std::ranges::drop_view
- std::ranges::drop_while_view
- std::ranges::ref_view
- std::ranges::subrange
- std::ranges::take_view
- std::ranges::take_while_view
以下型別派生自 std::ranges::view_interface 且不宣告自己的 data()
成員函式,但它們不能使用預設實現,因為其迭代器型別從不滿足 contiguous_iterator
- std::ranges::basic_istream_view
- std::ranges::elements_view
- std::ranges::filter_view
- std::ranges::iota_view
- std::ranges::join_view
- std::ranges::lazy_split_view
- std::ranges::reverse_view
- std::ranges::split_view
- std::ranges::transform_view
[編輯] 示例
執行此程式碼
#include <array> #include <iostream> #include <ranges> #include <string_view> int main() { constexpr std::string_view str { "Hello, C++20!" }; std::cout << (str | std::views::drop(7)).data() << '\n'; constexpr static std::array a { 1,2,3,4,5 }; constexpr auto v { a | std::views::take(3) }; static_assert( &a[0] == v.data() ); }
輸出
C++20!
[編輯] 參閱
(C++17) |
獲取指向底層陣列的指標 (函式模板) |
(C++20) |
獲取指向連續範圍開頭的指標 (定製點物件) |
(C++20) |
獲取指向只讀連續範圍開頭的指標 (定製點物件) |
(C++20) |
從類指標型別獲取原始指標 (函式模板) |