std::aligned_storage
Aus cppreference.com
![]() | This page has been machine-translated from the English version of the wiki using Google Translate. The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
definiert in Header <type_traits> | ||
template<std::size_t Len, std::size_t Align =/*default-alignment*/> struct aligned_storage; | (seit C++11) | |
Stellt das Mitglied typedef
type
, das ein POD-Typ für die Verwendung als Speicher für jeden initialisierten Objekt, dessen Größe höchstens Len
und deren Ausrichtung Anforderung ist ein Teiler von Align
ist. Der Standardwert von Align
ist die höchste (die größte) Angleichung Voraussetzung für jedes Objekt, dessen Größe höchstens Len
.Original:
Provides the member typedef
type
, which is a POD type suitable for use as uninitialized storage for any object whose size is at most Len
and whose alignment requirement is a divisor of Align
. The default value of Align
is the most stringent (the largest) alignment requirement for any object whose size is at most Len
.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Inhaltsverzeichnis |
[Bearbeiten]Mitglied Typen
Name Original: Name The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. | Definition |
type | Die POD-Typ der Größe Len mit Angleichung Voraussetzung Align Original: the POD type of size Len with alignment requirement Align The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
[Bearbeiten]Notes
Der Typ von std::aligned_storage definiert verwendet werden, um initialisierte Speicherblöcke geeignet sind, die Objekte des gegebenen Typs zu halten, gegebenenfalls strenger als notwendig ausgerichtet sind, zum Beispiel auf einem Cache oder Seitenbegrenzung zu erzeugen .
Original:
The type defined by std::aligned_storage can be used to create uninitialized memory blocks suitable to hold the objects of given type, optionally aligned stricter than necessary, for example on a cache or page boundary.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[Bearbeiten]Mögliche Implementierung
Außer Standard-Argument ist aligned_storage ausdrückbar der alignas:
Original:
Except for default argument, aligned_storage is expressible in terms of alignas:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
template<std::size_t Len, std::size_t Align>struct aligned_storage {typedefstruct{ alignas(Align)unsignedchar data[Len];} type;}; |
[Bearbeiten]Beispiel
Eine primitive statische Vektor Klasse demonstriert Erstellung, Zugriff und Zerstörung von Objekten in ausgerichtete Lagerung
Original:
A primitive static vector class, demonstrating creation, access, and destruction of objects in aligned storage
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>#include <type_traits>#include <string> template<class T, std::size_t N>class static_vector {// propertly aligned uninitialized storage for N T'stypename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type data[N];std::size_t m_size;public: static_vector(): m_size(0){};// Create an object in aligned storagetemplate<typename ...Args>void emplace_back(Args&&... args){ new(data+m_size) T(std::forward<Args>(args)...); m_size++;// bounds check omitted} // Access an object in aligned storageconst T& operator[](size_t pos)const{returnreinterpret_cast<const T&>(data[pos]);}// Delete objects from aligned storage ~static_vector(){for(std::size_t pos =0; pos < m_size;++pos){reinterpret_cast<const T*>(data+pos)->~T();}}}; int main(){ static_vector<std::string, 10> v1; v1.emplace_back(std::string(5, '*')); v1.emplace_back(std::string(10, '*'));std::cout<< v1[0]<<'\n'<< v1[1]<<'\n';}
Output:
***** **********
[Bearbeiten]Siehe auch
alignas Spezifizierer | gibt an, dass der Speicher für die Variable durch bestimmte Menge (C++11) ausgerichtet werden soll Original: specifies that the storage for the variable should be aligned by specific amount (C++11) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
(C++11) | Ruft den Type der Alignment-Anforderungen Original: obtains the type's alignment requirements The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (Klassen-Template) |
(C++11) | definiert die Art geeignet zur Verwendung als Speicher für alle initialisierten gegebenen Typen Original: defines the type suitable for use as uninitialized storage for all given types The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (Klassen-Template) |
(C++11) | POD-Typ mit Angleichung Voraussetzung so groß wie alle anderen skalaren Typ Original: POD type with alignment requirement as great as any other scalar type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (typedef) |