C++のエイリアシング規則のために、char
配列に無制限(int *)を指すことができないという合意があるようです。intをchar配列に入れるには、新しい配置が法的に必要ですか?
この他の質問から - Generic char[] based storage and avoiding strict-aliasing related UB - プレースメントを介してストレージを(再)使用することが許可されているようです。
alignas(int) char buf[sizeof(int)];
void f() {
// turn the memory into an int: (??) from the POV of the abstract machine!
::new (buf) int; // is this strictly required? (aside: it's obviously a no-op)
// access storage:
*((int*)buf) = 42; // for this discussion, just assume the cast itself yields the correct pointer value
}
ので、上記の法律上のC++でとは実際にそれが法的にするために必要な新しい配置のですか?
関連:http://stackoverflow.com/questions/38862092/is-it-legal-to-alias-a-char-array-through-a-pointer-to-int –
https://godbolt.org/g/k2nVI9 –
関連性の高い、潜在的な詐欺:https://stackoverflow.com/questions/40873520/reinterpret-cast-creating-a-trivially-default-constructible-object –