std::aligned_storage
提供: cppreference.com
![]() |
このページは、Google 翻訳を使って英語版から機械翻訳されました。
翻訳には誤りや奇妙な言い回しがあるかもしれません。文章の上にポインタをおくと、元の文章が見れます。誤りを修正して翻訳を改善する手助けをしてください。翻訳についての説明は、ここをクリックしてください。 |
ヘッダ <type_traits> で定義
|
||
template< std::size_t Len, std::size_t Align = /*default-alignment*/ > struct aligned_storage; |
(C++11およびそれ以降) | |
サイズは最も
type
とした、アラインメント要件Len
の除数である任意のオブジェクトの初期化されていないストレージとして使用するのに適したPOD型であるメンバのtypedefAlign
は、用意されています。 Align
のデフォルト値は、ほとんどのサイズ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.
目次 |
[編集] メンバータイプ
名前
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
|
アライメント要件
Len でサイズAlign のPOD型 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. |
[編集] ノート
std::aligned_storageによって定義された型は、キャッシュやページ境界上例えば、必要に応じて、必要以上に厳格に整列、与えられた型のオブジェクトを保持するのに適した初期化されていないメモリブロックを作成するために使用することができます.
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.
[編集] 可能な実装
デフォルトの引数を除き、aligned_storageは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 { typedef struct { alignas(Align) unsigned char data[Len]; } type; }; |
[編集] 例
プリミティブstatic vectorクラス、デモの作成、アクセス、および整列ストレージ内のオブジェクトの破壊
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.
Run this code
#include <iostream> #include <type_traits> #include <string> template<class T, std::size_t N> class static_vector { // propertly aligned uninitialized storage for N T's typename 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 storage template<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 storage const T& operator[](size_t pos) const { return reinterpret_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'; }
出力:
***** **********
[編集] 参照
alignas指定子 | 変数の記憶領域が特定の量(C++11)で整列されるように指定します
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) |
型のアライメント要件を取得します (クラステンプレート) |
(C++11) |
指定された型すべてのための未初期化記憶域として使用するのに適した型を定義します (クラステンプレート) |
(C++11) |
他のいかなるスカラー型より大きいまたは等しいアライメント要件を持つトリビアルな型 (typedef) |