Namespaces
Variants

std::ranges:: data

From cppreference.net
Ranges library
Range adaptors
定義先ヘッダ <ranges>
定義先ヘッダ <iterator>
inline namespace /* 未指定 */ {

inline constexpr /* 未指定 */ data = /* 未指定 */ ;

}
(C++20以降)
(カスタマイゼーションポイントオブジェクト)
呼び出しシグネチャ
template < class T >

requires /* 下記参照 */
constexpr std:: remove_reference_t <

ranges:: range_reference_t < T >> * data ( T && t ) ;
(C++20以降)

連続した範囲の最初の要素へのポインタを返します。

T が配列型であり、 std:: remove_all_extents_t < std:: remove_reference_t < T >> が不完全型である場合、 ranges::data の呼び出しは不適格であり、診断は要求されない。

引数が左辺値であるか、または ranges:: enable_borrowed_range < std:: remove_cv_t < T >> true の場合、 ranges::data の呼び出しは 式等価 です:

  1. decay-copy ( t. data ( ) ) (C++23まで) auto ( t. data ( ) ) (C++23から) 、その式が有効で、その型がオブジェクト型へのポインタである場合。
  2. それ以外の場合、 std:: to_address ( ranges:: begin ( t ) ) 、ただし式 ranges:: begin ( t ) が有効で、その型が std::contiguous_iterator をモデルとする場合。

それ以外のすべての場合において、 ranges::data の呼び出しはill-formedとなり、これはテンプレートのインスタンス化の直接の文脈内で ranges :: data ( e ) が現れた場合に 置換失敗 を引き起こす可能性があります。

目次

翻訳のポイント: - "Contents" → "目次"(目次として自然な表現) - "Customization point objects" → 非翻訳(C++専門用語のため保持) - "Notes" → "注記"(技術文書で一般的な表現) - "Example" → "例"(簡潔で適切な訳) - "See also" → "関連項目"(技術文書で標準的な表現) - HTMLタグ、属性、クラス名は完全に保持 - 番号部分は変更なし - フォーマットと構造は完全に維持

カスタマイゼーションポイントオブジェクト

名前 ranges::data カスタマイゼーションポイントオブジェクト を表し、これは 関数オブジェクト のconstな リテラル semiregular クラス型である。詳細は CustomizationPointObject を参照。

注記

引数が右辺値(すなわち T がオブジェクト型)であり、かつ ranges:: enable_borrowed_range < std:: remove_cv_t < T >> false の場合、 ranges::data の呼び出しは不適格となり、これは置換失敗も引き起こします。

ranges :: data ( e ) が有効な場合、それはオブジェクトへのポインタを返します。

C++20標準では、基となる data 関数呼び出しがprvalueを返す場合、戻り値は具体化された一時オブジェクトからムーブ構築されることが要求されていました。しかし、すべての実装では直接prvalueを返しています。この要件は、実装に合わせるためにポストC++20提案 P0849R8 によって修正されました。

#include <cstring>
#include <iostream>
#include <ranges>
#include <string>
int main()
{
    std::string s{"Hello world!\n"};
    char a[20]; // Cスタイル文字列用のストレージ
    std::strcpy(a, std::ranges::data(s));
    // [data(s), data(s) + size(s)] は NTBS であることが保証される
    std::cout << a;
}

出力:

Hello world!

関連項目

読み取り専用連続範囲の先頭へのポインタを取得する
(カスタマイゼーションポイントオブジェクト)
範囲の先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト)
(C++17)
基となる配列へのポインタを取得する
(関数テンプレート)