Namespaces
Variants

std::ranges::cdata

Von de.cppreference.net
 
 
Ranges-Bibliothek
Bereichsadaptoren
 
Definiert in Header <ranges>
Definiert in Header <iterator>
inline namespace /*unspecified*/ {
    inline constexpr /*unspecified*/ cdata = /*unspecified*/;
}
(seit C++20)
(Anpassungspunktobjekt)
Aufrufsignatur
template< class T >
    requires /* see below */
constexpr /* see below */ cdata( T&& t );
(seit C++20)

Gibt einen Zeiger auf das erste Element konstanten Typs(seit C++23) eines zusammenhängenden Bereichs zurück, der durch ein const-qualifiziertes(bis C++23) Argument bezeichnet wird.

Sei CT be

  • const std::remove_reference_t<T>& wenn das Argument ein Lvalue ist (d.h. T ein Lvalue-Referenztyp ist),
  • const T andernfalls.

Ein Aufruf von ranges::cdata ist ausdrucksäquivalent zu ranges::data(static_cast<CT&&>(t)).

Der Rückgabetyp ist äquivalent zu std::remove_reference_t<ranges::range_reference_t<CT>>*.

(bis C++23)

Wenn das Argument ein Lvalue ist oder ranges::enable_borrowed_range<std::remove_cv_t<T>> true ist, dann ist ein Aufruf von ranges::cdata ausdrucksäquivalent zu:

Der Rückgabetyp ist äquivalent zu std::remove_reference_t<ranges::range_const_reference_t<T>>*.

In allen anderen Fällen ist ein Aufruf von ranges::cdata nicht wohlgeformt, was zu Substitutionsfehler führen kann, wenn der Aufruf im unmittelbaren Kontext einer Template-Instantiierung auftritt.

(seit C++23)

Wenn ranges::cdata(t) gültig ist, dann gibt es einen Zeiger auf ein Objekt konstanten Typs(seit C++23) zurück.

Customization Point Objects

Der Name ranges::cdata bezeichnet ein Customization Point Object , welches ein konstantes Funktionsobjekt eines Literal semiregular -Klassentyps ist. Weitere Details finden Sie unter CustomizationPointObject .

Beispiel

#include <cstring>
#include <iostream>
#include <ranges>
#include <string>
int main()
{
    std::string src {"hello world!\n"};
//  std::ranges::cdata(src)[0] = 'H'; // error, src.data() is treated as read-only
    std::ranges::data(src)[0] = 'H'; // OK, src.data() is a non-const storage
    char dst[20]; // storage for a C-style string
    std::strcpy(dst, std::ranges::cdata(src));
    // [data(src), data(src) + size(src)] is guaranteed to be an NTBS
    std::cout << dst;
}

Ausgabe:

Hello world!

Siehe auch

erhält einen Zeiger auf den Anfang eines zusammenhängenden Bereichs
(Anpassungspunktobjekt)
(C++17)
erhält den Zeiger auf das zugrundeliegende Array
(Funktionstemplate)