将void*转换为char*

4

如何在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();
    }

}


4
在C++中没有 PVOIDPCHAR。也许你想给这个问题打上特定的实现标签? :-) - paxdiablo
void*char*的大小相同,所以你只需要进行强制类型转换即可。 - Ryan
无论使用什么类型转换,都没有关系吗? - Smit Ycyken
在这种特定情况下,这两个转换执行相同的操作。 - T.C.
1个回答

7

static_cast 是合适的选择。使用 static_cast 来回转换 void* 可以保留地址,可以在这里查看类似问题的答案here

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


谢谢,这篇文章解释得很好,比MSDN更好。 - Smit Ycyken
3
感谢指出这个问题。基于此,我已经关闭了这个主题讨论。顺便说一下,你的答案是正确的,但推理是错误的。在C++11中,static_castreinterpret_cast执行相同的操作。然而,在对reinterpret_cast进行转换时,应该尽可能使用static_cast。通常情况下,后者用于在完全不同的类型之间进行转换;例如,从 longX*。在我的看法中,以下是各种类型强制转换的丑陋程度指数(从低到高):dynamic_castconst_caststatic_castreinterpret_cast, *"C-style cast"*。 - iammilind
我明白了!谢谢您的澄清。我应该将我的答案编辑成更合适的内容吗? - sweerpotato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接