以下合法C++是否具有明确定义的行为?
class my_class { ... };
int main()
{
char storage[sizeof(my_class)];
new ((void *)storage) my_class();
}
Run Code Online (Sandbox Code Playgroud)
或者这是因为指针投射/对齐考虑因素有问题吗?
首先,这不是重复的为什么当两个链接的static_cast可以完成它的工作时,我们在C++中有reinterpret_cast?.
我知道我们甚至不能使用两个连锁static_cast来实现这reinterpret_cast一点的情况.但是,在任何情况下我都应该选择两个链接static_cast而不是简单且更具可读性的情况reinterpret_cast吗?
我读过这篇关于C/C++严格别名的文章.我认为同样适用于C++.
据我了解,严格别名用于重新排列代码以进行性能优化.这就是为什么两个不同(在C++情况下不相关)类型的指针不能引用相同的内存位置的原因.
这是否意味着只有在修改内存时才会出现问题?除了内存对齐可能存在的问题.
例如,处理网络协议或反序列化.我有一个字节数组,动态分配和数据包结构正确对齐.我reinterpret_cast可以使用我的数据包结构吗?
char const* buf = ...; // dynamically allocated
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // [shift] satisfies alignment requirements
Run Code Online (Sandbox Code Playgroud)