std::ranges::cdata
Definido en el archivo de encabezado <ranges>
|
||
inline namespace /*no especificado*/ { inline constexpr /*no especificado*/ cdata = /*no especificado*/; |
(desde C++20) (objeto punto de personalización) |
|
Signatura de la llamada |
||
template< class T > requires /* véase a continuación */ |
(desde C++20) | |
Devuelve un puntero al primer elemento de un rango contiguo denotado por un argumento calificado const.
Sea CT
- const std::remove_reference_t<T>& si el argumento es un l-valor (es decir
T
es un tipo referencia l-valor), - const T de lo contrario,
una llamada a ranges::cdata
es equivalente en expresión a ranges::data(static_cast<CT&&>(t)).
Si ranges::cdata(t) es válido, entonces devuelve un puntero a un objeto.
Contenido |
[editar] Equivalente en expresión
La expresión e es equivalente-en-expresión a la expresión f, si e y f tienen los mismos efectos, ambas potencialmente lanzan o ambas potencialmente no lanzan (es decir, noexcept (e) == noexcept(f)), y ambas son subexpresiones constantes o ambas no son subexpresiones constantes.
[editar] Objetos de punto de personalización
El nombre ranges::cdata
denota un objeto de punto de personalización, que es un objeto función const
de un tipo clase literal semiregular
(denotado, a efectos de exposición, como cdata_ftor
). Todos los ejemplares de cdata_ftor
son iguales. Por lo tanto, ranges::cdata
puede copiarse libremente y sus copias pueden usarse indistintamente.
Dado un conjunto de tipos Args...
, si std::declval<Args>()... cumple con los requerimientos para los argumentos de ranges::cdata
mencionado anteriormente, cdata_ftor
satisfará a std::invocable<const cdata_ftor&, Args...>. De lo contrario, ningún operador de llamada a función de cdata_ftor
participa en la resolución de sobrecarga.
[editar] Ejemplo
#include <cstring> #include <iostream> #include <ranges> #include <string> int main() { std::string src {"hola mundo\n"}; // std::ranges::cdata(src)[0] = 'H'; // ERROR, src.data() se trata como de solo lectura std::ranges::data(src)[0] = 'H'; // de acuerdo, src.data() es un almacenamiento no const char dst[20]; // almacenamiento para una cadena estilo C std::strcpy(dst, std::ranges::cdata(src)); // [data(src), data(src) + size(src)] garantizado ser cadena de bytes terminada en nulo std::cout << dst; }
Salida:
Hola mundo
[editar] Véase también
(C++20) |
Obtiene un puntero al principio de un rango contiguo (objeto punto de personalización) |
(C++17) |
Obtiene el puntero al array subyacente. (plantilla de función) |