Namespaces
Variants

std::data

De es.cppreference.net
 
 
Biblioteca de iteradores
Conceptos de iterador
Primitivas de iterador
Conceptos y utilidades de algoritmos
Conceptos invocables indirectos
Requisitos comunes de algoritmos
(C++20)
(C++20)
(C++20)
Utilidades
(C++20)
Adaptadores de iterador
Acceso a rangos
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Definido en el encabezado <array>
Definido en el encabezado <deque>
Definido en el encabezado <flat_map>
 (since C++23)
Definido en el encabezado <flat_set>
 (since C++23)
Definido en el encabezado <forward_list>
Definido en el encabezado <inplace_vector>
 (since C++26)
Definido en el encabezado <iterator>
Definido en el encabezado <list>
Definido en el encabezado <map>
Definido en el encabezado <optional>
 (since C++26)
Definido en el encabezado <regex>
Definido en el encabezado <set>
Definido en el encabezado <span>
 (since C++20)
Definido en el encabezado <stacktrace>
 (since C++23)
Definido en el encabezado <string>
Definido en el encabezado <string_view>
Definido en el encabezado <unordered_map>
Definido en el encabezado <unordered_set>
Definido en el encabezado <valarray>
Definido en el encabezado <vector>
template< class C >
constexpr auto data( C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(1) (since C++17)
template< class C >
constexpr auto data( const C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(2) (since C++17)
template< class T, std::size_t N >
constexpr T* data( T (&array)[N] ) noexcept;
(3) (since C++17)

Devuelve un puntero al bloque de memoria que contiene los elementos del rango.

1,2) Devuelve c.data().
3) Devuelve array.

Parámetros

c - un contenedor o vista con una data ( ) función miembro
array - un array de tipo arbitrario
il - un std::initializer_list

Valor de retorno

1,2) c. data ( )
3) array
4) il. begin ( )

Excepciones

1) Puede lanzar excepciones definidas por la implementación.

Notas

La sobrecarga para std::initializer_list es necesaria porque no tiene una función miembro data .

Macro de prueba de características Valor Estándar Característica
__cpp_lib_nonmember_container_access 201411L (C++17) std::size() , std::data() , y std::empty()

Implementación posible

Primera versión
template<class C>
constexpr auto data(C& c) -> decltype(c.data())
{
    return c.data();
}
Segunda versión
template<class C>
constexpr auto data(const C& c) -> decltype(c.data())
{
    return c.data();
}
Tercera versión
template<class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept
{
    return array;
}
Cuarta versión
template<class E>
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

Ejemplo

#include <cstring>
#include <iostream>
#include <string>
int main()
{
    std::string s{"Hello world!\n"};
    char a[20]; // almacenamiento para una cadena estilo C
    std::strcpy(a, std::data(s));
//  [s.data(), s.data() + s.size()] está garantizado que es un NTBS desde C++11
    std::cout << a;
}

Salida:

Hello world!

Informe de defecto

Los siguientes informes de defectos que cambian el comportamiento se aplicaron retroactivamente a estándares C++ publicados anteriormente.

DR Aplicado a Comportamiento según lo publicado Comportamiento correcto
P3016R6 C++17 1) se proporcionó una sobrecarga de std::data no miembro para std::initializer_list
2) std::data no era necesario para propagar la especificación de excepción
1) eliminada
2) requerida

Véase también

obtiene un puntero al inicio de un rango contiguo
(objeto de punto de personalización)
obtiene un puntero al inicio de un rango contiguo de solo lectura
(objeto de punto de personalización)