gpt4 book ai didi

c++ - 我可以举一个现实生活中的例子,其中通过 void* 进行强制转换而 reinterpret_cast 无效吗?

转载 作者:可可西里 更新时间:2023-11-01 17:59:48 26 4
gpt4 key购买 nike

有一组关于交叉转换的问题(从 T1* 转换为不相关的 T2*),例如 thisthis .答案通常是这样的:reinterpret_cast 是实现定义的,转换为 void* 后跟 static_cast 是明确定义的。然而,我还没有看到使用 reinterpret_cast 时可能出错的任何真实示例。

通过 void* 进行强制转换而 reinterpret_cast 无效的真实示例有哪些?

最佳答案

real-life examples where casting through void* works and reinterpret_cast doesn't

如果我将这句话解释为,casting through void*工作帮助我避免未定义的行为reinterpret_cast不那么下面是一个例子。

reinterpret_cast<TYPE*&> (指针引用)可能会破坏严格的别名规则(至少在 g++ 中会发生这种情况)并导致您出现未定义的行为。 Demo .

然而,static_cast<void*&>将导致编译器错误并使您免于此类未定义的行为。 Demo .

我在智能指针中看到过这样的用法:

template<class TYPE>
struct SmartPointer
{
void *p;
TYPE& operator ++ ()
{
(reinterpret_cast<TYPE*&>(p))++; // breaking strict aliasing rule
return *this;
}
}

关于c++ - 我可以举一个现实生活中的例子,其中通过 void* 进行强制转换而 reinterpret_cast 无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6594892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com