15得票1回答
通过C强制类型转换访问结构体的第一个字段是否违反了严格别名规则?

这段代码是否违反了严格别名规则?struct {int x;} a; *(int*)&a = 3 更抽象地说,只要原始的读写操作正确,将不同类型之间进行强制类型转换是否合法?

15得票2回答
reinterpret_cast 的 bug 或 UB?

考虑以下代码: #include <cstdint> #include <algorithm> std::uintptr_t minPointer(void *first, void *second) { const auto pair = std::min...

14得票3回答
reinterpret_cast与strict aliasing的区别

我正在阅读关于严格别名的文章,但仍然有些模糊,我从来不确定定义/未定义行为的界限。我找到的最详细的文章集中在C语言上。因此,如果您能告诉我这是否允许以及自C++98/11以来发生了什么变化,那就太好了。 #include <iostream> #include <cstri...

14得票2回答
reinterpret_cast是否会导致未定义行为?

我有一个类模板 A,其中包含指针容器(T*): template <typename T> class A { public: // ... private: std::vector<T*> data; }; 还有一堆像这样的函数: void f(...

14得票1回答
将字符数组强制转换为另一种类型是否违反了严格别名规则?

考虑这两个函数:int f1() { alignas(int) char buf[sizeof(int)] = {}; return *reinterpret_cast<int*>(buf); } int f2() { alignas(int) char buf[si...

13得票2回答
将 shared_ptr 的向量转换为 shared_ptr 到 const 的向量

让 class A { std::vector<std::shared_ptr<int>> v_; }; 现在我想通过两个公共成员函数来访问v_ std::vector<std::shared_ptr<int>> const &a...

13得票7回答
C#中类似于C++的reinterpret_cast的等效方法是什么?

我想知道在C#中与C++的reinterpret_cast等效的是什么? 以下是我的示例:class Base { protected int counter = 0; } class Foo : Base { public int Counter { ...

13得票1回答
使用constexpr函数代替reinterpret_cast的替代方案

下面是一个用于计算CRC32的constexpr字符串字面值。 我不得不将字符串字面值中的字符从char重新解释为unsigned char。因为在constexpr函数中不允许使用reinterpret_cast,所以解决方法是手动进行二进制补码转换,但我对此感到有些失望。 是否存在更优...

13得票6回答
为什么C风格的转换可以工作,但reinterpret_cast不能工作?

所以我有一个两个字符的数组unsigned char v[2]; 我想将v[0]的值显示为从0到255的数字,但是cout << v[0] << endl; //prints some garbage cout << (void*)v[0] <&lt...

13得票2回答
使用reinterpret_cast进行有符号别名化

请看以下代码#include <iostream> void func() { int i = 2147483640; while (i < i + 1) { std::cerr << i << '\n'; ...