名前空間
変種
操作

std::ranges::view_interface<D>::data

From cppreference.com
 
 
Rangesライブラリ
Rangeアダプタ
 
 
constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<D>>;
(1) (C++20以降)
constexpr auto data() const

    requires ranges::range<const D> &&

        std::contiguous_iterator<ranges::iterator_t<const D>>;
(2) (C++20以降)

data() メンバ関数のデフォルト実装は、ビューが空でない場合に、派生型ビューが参照する連続ストレージの最も低いアドレス(contiguous_iterator から推測される)を取得するため、std::to_address を介して先頭イテレータが示すアドレスを取得します。

1) derivedstatic_cast<D&>(*this) とします。 return std::to_address(ranges::begin(derived)); に相当します。
2) (1) と同じですが、derivedstatic_cast<const D&>(*this) です。

目次

[編集] パラメータ

(なし)

[編集] 戻り値

先頭イテレータが示すアドレス。

[編集] 注記

以下の派生型は data() のデフォルト実装を使用できます。

std::ranges::view_interface から派生し、独自の data() メンバ関数を宣言していませんが、イテレータ型が contiguous_iterator を満たさないため、デフォルト実装を使用できません。

[編集]

#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)
背後にある配列へのポインタを取得する
(function template) [編集]
連続rangeの先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト)[編集]
読み取り専用の連続rangeの先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト)[編集]
ポインタライクな型から生のポインタを取得します
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)