9得票2回答
reinterpret_cast在处理低级字节操作时是否不好?

我正在编写一个WebSocket服务器,需要处理掩码数据并将其解除掩码。 掩码是unsigned char[4]类型的,数据也是一个unsigned char*类型的缓冲区。 我不想逐字节地执行异或操作,而是希望一次性对4个字节执行异或操作。 uint32_t * const end =...

9得票5回答
将此C转换为reinterpret_cast是否安全?

我想要移除一些代码中的C风格类型转换,并且对唯一的替代方案存在疑虑。 原始代码如下: WPARAM param = (WPARAM)(GetDlgItem(IDC_WORKFLOW).m_hWnd); this->PostMessage(WM_NEXTDLGCTL, param, T...

9得票5回答
const_cast与reinterpret_cast的区别

参考SO C++ FAQ 何时应该使用static_cast、dynamic_cast和reinterpret_cast?。 const_cast用于移除或添加变量的const属性,这是唯一可靠、定义明确且合法的方法。reinterpret_cast用于更改类型的解释。 我以合理的方式理解...

9得票4回答
我能将一个int类型的空指针通过reinterpret_cast转换为long类型吗?

int *pt = 0; long i = reinterpret_cast<long>(pt); 这里的i是否保证为0?这是明确定义的还是实现定义的?我查了C++标准,但它只规定: 数据对象或函数(但不包括成员指针)的指针可以转换为足够大的任何整数类型。 在这种情况下,...

9得票1回答
为什么在这里使用static_cast而不是reinterpret_cast很重要?

在Raymond Chen的博客回复中, 一个提问者指出: Raymond,我认为C++示例不正确,因为根据ISO C ++ 2003标准(10-3,第168页),派生类中基类子对象的位置是未指定的,并且您假设基类子对象始终位于开头。 C示例在C ++中也可以正常工作,因此我会坚持使用它...

9得票3回答
为什么在这里使用void**?

从v8-0.2.5中提取的代码 /** * Checks whether two handles are the same. * Returns true if both are empty, or if the objects * to which they refer are id...

9得票2回答
在C++中重新解释这个:合法还是不合法?

这是一个有点奥妙的问题,但我很好奇以下类扩展模式在现代C ++(就所有目的而言,我接受将讨论限制在C++17及更高版本)中是否合法(即不构成未定义行为)。 template<typename T> struct AddOne { T add_one() const { ...

9得票3回答
如何通过 aligned_storage 和多态性避免未定义的行为

我有一些代码,基本上实现了这个功能: struct Base { virtual ~Base() = default; virtual int forward() = 0; }; struct Derived : Base { int forward() overr...

9得票1回答
如何将一个函数指针从一种类型转换为另一种类型是最佳方法?

我在 Stack Overflow 上搜索了答案,但没有找到与这个问题有关的具体情况:只有关于使用各种类型转换运算符的一般情况。 因此,要点是当使用 Windows 的 GetProcAddress() API 调用检索函数地址时,它返回一个类型为 FARPROC 的函数指针,其中: type...

9得票2回答
类型游戏的变种:原地平凡构造

我知道这是一个相当普遍的主题,但尽管通常的UB很容易找到,但我到目前为止没有找到这个变体。 所以,我正在尝试在避免实际复制数据的情况下正式引入像素对象。 这是有效的吗? struct Pixel { uint8_t red; uint8_t green; uint...