Namespaces
Variants

std::ranges::cdata

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
Definido en el encabezado <ranges>
Definido en el encabezado <iterator>
inline namespace /*unspecified*/ {
    inline constexpr /*unspecified*/ cdata = /*unspecified*/;
}
(desde C++20)
(objeto de punto de personalización)
Firma de llamada
template< class T >
    requires /* see below */
constexpr /* see below */ cdata( T&& t );
(desde C++20)

Devuelve un puntero al primer elemento de tipo constante(desde C++23) de un rango contiguo denotado por un argumento calificado como const(hasta C++23).

Sea CT

  • const std::remove_reference_t<T>& si el argumento es un lvalue (es decir, T es un tipo de referencia a lvalue),
  • const T en caso contrario.

Una llamada a ranges::cdata es equivalente en expresión a ranges::data(static_cast<CT&&>(t)).

El tipo de retorno es equivalente a std::remove_reference_t<ranges::range_reference_t<CT>>*.

(hasta C++23)

Si el argumento es un lvalue o ranges::enable_borrowed_range<std::remove_cv_t<T>> es true, entonces una llamada a ranges::cdata es equivalente en expresión a:

El tipo de retorno es equivalente a std::remove_reference_t<ranges::range_const_reference_t<T>>*.

En todos los demás casos, una llamada a ranges::cdata está mal formada, lo que puede resultar en fallo de sustitución cuando la llamada aparece en el contexto inmediato de una instanciación de plantilla.

(desde C++23)

Si ranges::cdata(t) es válido, entonces devuelve un puntero a un objeto de tipo constante(desde C++23).

Objetos de punto de personalización

El nombre ranges::cdata denota un objeto de punto de personalización , que es un objeto función constante de un tipo de clase literal semiregular . Consulte CustomizationPointObject para más detalles.

Ejemplo

#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;
}

Salida:

Hello world!

Véase también

obtiene un puntero al inicio de un rango contiguo
(objeto de punto de personalización)
(C++17)
obtiene el puntero al array subyacente
(plantilla de función)