首页 > 解决方案 > 如何将 const uint8_t* 转换为 char*

问题描述

我有一个const uint8_t*我想转换为 achar*的接口,该接口需要一个char*.

最简单的方法是使用 C 风格的演员表:

const uint8_t* aptr = &some_buffer;
char* bptr = (char*)aptr;

但是,我们的内部样式指南(基于Google C++ 样式指南)禁止 C 样式转换。

另一种选择是这个怪物,我觉得它很难读:

char *cptr = reinterpret_cast<char*>(const_cast<uint8_t*>(aptr));

我尝试的这些其他选项都无法编译:

char* dptr = reinterpret_cast<char*>(aptr);
char* eptr = const_cast<char*>(aptr);
char* fptr = static_cast<char*>(aptr);

有什么方法可以使用 C++ 风格的演员来执行这种演员,而无需嵌套两个单独的演员操作?

标签: c++casting

解决方案


有什么方法可以使用 C++ 风格的演员来执行这种演员,而无需嵌套两个单独的演员操作?

不便携,不。没有单一的“类型错误并且 const 也是错误的”演员表。

另一种选择是这个怪物,我觉得它很难读:

char *cptr = reinterpret_cast<char*>(const_cast<uint8_t*>(ptr));

去做。

C++ casts 和你的内部风格指南都在努力让这看起来很可怕。

您可以通过编写自己的演员表来防止这些演员表的重复。

template< typename T >
char* awful_monster_cast( const T * ptr )
{
    return reinterpret_cast<char*>(const_cast<T*>(ptr));
}

推荐阅读