den folgenden Code Gegeben:sizeof std :: aligned_storage und std :: aligned_union
#include <iostream>
#include <type_traits>
int main() {
std::aligned_storage<sizeof(double), alignof(double)> storage;
std::aligned_union<sizeof(double), double> union_storage;
std::cout << sizeof(storage) << '\n';
std::cout << sizeof(union_storage) << '\n';
std::cout << sizeof(double) << '\n';
}
Ich erwarte sizeof(storage)
und sizeof(union_storage)
größer oder gleich sizeof(double)
sein, da sie ein double
in der Lage sein zu halten. Allerdings I get the output
1
1
8
Klirren-3.8 und gcc-5.3 beide produzieren diese Ausgabe.
Warum gibt sizeof
eine falsche Größe zurück?
Wenn ich Placement neu verwende, um double
in storage
oder union_storage
zu setzen, wäre das undefiniertes Verhalten?
Oder 'aligned_storage_t' usw. in C++ 14. –