std::data
Von cppreference.com
| Definiert in der Header-Datei <array> |
||
| Definiert in Header <deque> |
||
| Definiert in Header <flat_map> |
||
| Definiert in Header <flat_set> |
||
| Definiert in Header <forward_list> |
||
| Definiert in Header <inplace_vector> |
||
| Definiert in Header <iterator> |
||
| Definiert in Header <list> |
||
| Definiert in Header <map> |
||
| Definiert in Header <regex> |
||
| Definiert in Header <set> |
||
| Definiert in Header <span> |
||
| Definiert in Header <string> |
||
| Definiert in Header <string_view> |
||
| Definiert in Header <unordered_map> |
||
| Definiert in Header <unordered_set> |
||
| Definiert in Header <vector> |
||
template< class C > constexpr auto data( C& c ) -> decltype(c.data()); |
(1) | (seit C++17) |
template< class C > constexpr auto data( const C& c ) -> 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) |
template< class E > constexpr const E* data( std::initializer_list<E> il ) noexcept; |
(4) | (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.
4) Gibt il.begin() zurück.
Inhalt |
[bearbeiten] Parameter
| c | - | ein Container oder eine Ansicht mit einer Memberfunktion data() |
| array | - | Ein Array beliebigen Typs |
| il | - | eine std::initializer_list |
[bearbeiten] Rückgabewert
1,2) c.data()
3) array
4) il.begin()
[bearbeiten] Ausnahmen
1) Kann implementierungsabhängige Ausnahmen auslösen.
[bearbeiten] Anmerkungen
Die Überladung für std::initializer_list ist notwendig, da sie keine Memberfunktion data hat.
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_nonmember_container_access |
201411L |
(C++17) | std::size(), std::data() und std::empty() |
[bearbeiten] 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(); } |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <cstring> #include <iostream> #include <string> int main() { std::string s{"Hello world!\n"}; char a[20]; // storage for a C-style string std::strcpy(a, std::data(s)); // [s.data(), s.data() + s.size()] is guaranteed to be an NTBS since C++11 std::cout << a; }
Ausgabe
Hello world!
[bearbeiten] Siehe auch
| (C++20) |
ruft einen Zeiger auf den Anfang eines zusammenhängenden Ranges ab (Customization Point Objekt) |
| (C++20) |
ruft einen Zeiger auf den Anfang eines schreibgeschützten zusammenhängenden Ranges ab (Customization Point Objekt) |