相关疑难解决方法(0)

char数组作为放置新的存储

以下合法C++是否具有明确定义的行为?

class my_class { ... };

int main()
{
    char storage[sizeof(my_class)];
    new ((void *)storage) my_class();
}
Run Code Online (Sandbox Code Playgroud)

或者这是因为指针投射/对齐考虑因素有问题吗?

c++ pointers placement-new

8
推荐指数
1
解决办法
2155
查看次数

C++什么时候我们更喜欢在reinterpret_cast上使用两个链式的static_cast

首先,这不是重复的为什么当两个链接的static_cast可以完成它的工作时,我们在C++中有reinterpret_cast?.

我知道我们甚至不能使用两个连锁static_cast来实现这reinterpret_cast一点的情况.但是,在任何情况下我都应该选择两个链接static_cast而不是简单且更具可读性的情况reinterpret_cast吗?

c++ casting static-cast reinterpret-cast

8
推荐指数
3
解决办法
1065
查看次数

我是否正确理解C/C++严格别名?

我读过这篇关于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)

c c++ strict-aliasing

6
推荐指数
1
解决办法
3922
查看次数