将 void* 转换为 char*

Smi*_*ken 4 c++ casting char void

在 C++ 中将 void* 转换为 char* 的最佳/最安全方法是什么?

static_cast 还是 reinterpret_cast?

void I2C::Read(void* buffer, DWORD address, UINT size) 
{
    if (_isDeviceAvailable)
    {
        _iicInstance.seekg(address, std::ios_base::beg);
        _iicInstance.read(reinterpret_cast<char *>(buffer), size);
        Gpio::SVSet();
    }
Run Code Online (Sandbox Code Playgroud)

}

swe*_*ato 6

static_cast将是这里的选择。使用static_castto 和 from avoid*保留地址,请在此处查看类似问题。

接受的答案也解释了为什么不使用reinterpret_cast类似的情况。

  • 感谢您指出问题。我已基于此关闭此线程。顺便说一句,你的答案是正确的,但推理是错误的。使用 C++11,`static_cast` 和 `reinterpret_cast` 都做同样的事情。但是,应该尽可能在 `reinterpret_cast` 上使用 `static_cast`。当在完全不同的类型之间进行转换时,通常使用后者;例如`long`到`X*`。IMO,下面是演员的丑陋指数(从最少到最多):`dynamic_cast`、`const_cast`、`static_cast`、`reinterpret_cast`、*“C 风格的演员”*。 (3认同)