Namespaces
Variants

std::data

Von de.cppreference.net
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsmittel
Indirekt aufrufbare Konzepte
Allgemeine Algorithmusanforderungen
(C++20)
(C++20)
(C++20)
Hilfsmittel
(C++20)
Iterator-Adapter
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Definiert in Header <array>
Definiert in Header <deque>
Definiert in Header <flat_map>
 (seit C++23)
Definiert in Header <flat_set>
 (seit C++23)
Definiert in Header <forward_list>
Definiert in Header <inplace_vector>
 (seit C++26)
Definiert in Header <iterator>
Definiert in Header <list>
Definiert in Header <map>
Definiert in Header <optional>
 (seit C++26)
Definiert in Header <regex>
Definiert in Header <set>
Definiert in Header <span>
 (seit C++20)
Definiert in Header <stacktrace>
 (seit C++23)
Definiert in Header <string>
Definiert in Header <string_view>
Definiert in Header <unordered_map>
Definiert in Header <unordered_set>
Definiert in Header <valarray>
Definiert in Header <vector>
template< class C >
constexpr auto data( C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(1) (seit C++17)
template< class C >
constexpr auto data( const C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(2) (seit C++17)
template< class T, std::size_t N >
constexpr T* data( T (&array)[N] ) noexcept;
(3) (seit C++17)

Gibt einen Zeiger auf den Speicherblock zurück, der die Elemente des Bereichs enthält.

1,2) Gibt c.data() zurück.
3) Gibt array zurück.

Parameter

c - ein Container oder View mit einer data ( ) Member-Funktion
array - ein Array beliebigen Typs
il - eine std::initializer_list

Rückgabewert

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

Exceptions

1) Kann implementierungsdefinierte Ausnahmen werfen.

Hinweise

Die Überladung für std::initializer_list ist notwendig, da sie keine Memberfunktion data besitzt.

Feature-Test Makro Wert Std Funktion
__cpp_lib_nonmember_container_access 201411L (C++17) std::size() , std::data() und std::empty()

Mögliche Implementierung

Erste Version
template<class C>
constexpr auto data(C& c) -> decltype(c.data())
{
    return c.data();
}
Zweite Version
template<class C>
constexpr auto data(const C& c) -> decltype(c.data())
{
    return c.data();
}
Dritte Version
template<class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept
{
    return array;
}
Vierte Version
template<class E>
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

Beispiel

#include <cstring>
#include <iostream>
#include <string>
int main()
{
    std::string s{"Hello world!\n"};
    char a[20]; // Speicher für einen C-String
    std::strcpy(a, std::data(s));
//  [s.data(), s.data() + s.size()] ist garantiert ein NTBS seit C++11
    std::cout << a;
}

Ausgabe:

Hello world!

Fehlerbericht

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
P3016R6 C++17 1) Nichtmitglied std::data Überladung wurde für std::initializer_list
2) std::data war nicht erforderlich, die Ausnahmespezifikation zu propagieren
1) entfernt
2) erforderlich

Siehe auch

erhält einen Zeiger auf den Anfang eines zusammenhängenden Bereichs
(Anpassungspunktobjekt)
erhält einen Zeiger auf den Anfang eines schreibgeschützten zusammenhängenden Bereichs
(Anpassungspunktobjekt)