Kelas aligned_union
Menyediakan jenis POD yang cukup besar dan cocok diselaraskan untuk menyimpan jenis union, dan ukuran yang diperlukan.
Sintaks
template <std::size_t Len, class... Types>
struct aligned_union;
template <std::size_t Len, class... Types>
using aligned_union_t = typename aligned_union<Len, Types...>::type;
Parameter
Len
Nilai perataan untuk jenis terbesar dalam union.
Jenis
Jenis yang berbeda dalam serikat yang mendasar.
Keterangan
Gunakan templat kelas untuk mendapatkan perataan dan ukuran yang diperlukan untuk menyimpan serikat dalam penyimpanan yang tidak diinisialisasi. Jenis anggota menamai type
jenis POD yang cocok untuk penyimpanan jenis apa pun yang tercantum dalam Jenis; ukuran minimumnya adalah Len. Anggota alignment_value
statis jenis std::size_t
berisi perataan paling ketat yang diperlukan dari semua jenis yang tercantum dalam Jenis.
Contoh
Contoh berikut menunjukkan cara menggunakan aligned_union
untuk mengalokasikan buffer tumpukan yang diratakan untuk menempatkan union.
// std__type_traits__aligned_union.cpp
#include <iostream>
#include <type_traits>
union U_type
{
int i;
float f;
double d;
U_type(float e) : f(e) {}
};
typedef std::aligned_union<16, int, float, double>::type aligned_U_type;
int main()
{
// allocate memory for a U_type aligned on a 16-byte boundary
aligned_U_type au;
// do placement new in the aligned memory on the stack
U_type* u = new (&au) U_type(1.0f);
if (nullptr != u)
{
std::cout << "value of u->i is " << u->i << std::endl;
// must clean up placement objects manually!
u->~U_type();
}
}
value of u->i is 1065353216
Persyaratan
Header:<type_traits>
Namespace: std
Baca juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk