std::ranges:: cdata
|
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
/* ver más abajo */
|
(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
Una llamada a
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
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
|
(desde C++23) |
Si ranges :: cdata ( t ) es válido, entonces retorna 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
|
(C++20)
|
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) |