たとえば
cpp
1#include <iostream> 2#include <cstdint> 3struct alignas(4) SkipData_t { 4 std::int32_t LINKS; 5 std::int32_t A; 6 std::int32_t B; 7 std::int32_t C; 8 std::int32_t D; 9 std::int32_t E; 10 std::int32_t F; 11 std::int32_t G; 12 std::int32_t H; 13 std::int32_t I; 14 std::int32_t J; 15 std::int32_t K; 16 std::int32_t L; 17 std::int32_t M; 18 std::int32_t N; 19}; 20union SkipDataConv { 21 alignas(4) SkipData_t flag; 22 alignas(4) std::int32_t arr[15]; 23}; 24static_assert(alignof(SkipData_t) == alignof(std::int32_t[15]), "err"); 25static_assert(sizeof(SkipData_t) == sizeof(std::int32_t[15]), "err"); 26 27int main() 28{ 29 SkipData_t a { 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0 }; 30 SkipDataConv* conv = reinterpret_cast<SkipDataConv*>(&a); 31 32 for(auto&& i : conv->arr) std::cout << i << std::endl; 33}
https://wandbox.org/permlink/hSg3lYuKx6QYJx3U
のようにメンバー変数の方がすべて std::int32_t
型のalignas指定されたPOD classを std::int32_t
型の配列に変換するときに両方を内包するunion型へのポインタにキャストすることは、C++11もしくはC++14規格書において合法でしょうか?
違法な場合、上記のようなclassを、メンバー変数と配列の要素が一対一対応した形で配列に変換する合法な方法は存在しますか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/28 16:18
2017/05/29 02:35
2017/05/29 03:25
2018/10/26 11:54