我有变量input
类型的const std::string&
const std::string& input
现在我需要将它转换为const unsigned char*
,因为这是函数的输入。
现在我有了正确的转换代码:
reinterpret_cast<const unsigned char*>(input.c_str())
这很好,但是在clang我收到了一个警告:
do not use reinterpret_cast [cppcoreguidelines-pro-type-reinterpret-cast]
将string
或const char*
更改为const unsigned char*
的正确方法是什么
发布于 2021-09-08 14:19:34
将字符串或const *更改为const无符号字符*的正确方法是什么?
正确的方法是使用reinterpret_cast。
如果您想要避免reinterpret_cast,那么必须完全避免指针转换,这只有通过解决XY问题才有可能。一些备选方案:
std::basic_string<unsigned char>
。std::ranges::views::transform
。unsigned char*
接受char*
的函数。H 212f 213
如果您不能更改input
的类型,并且确实需要一个unsigned char*
,并且仍然必须避免重新解释cast,那么您可以使用transform视图从输入创建std::basic_string<unsigned char>
。但是这有潜在的开销,所以考虑一下避免reinterpret_cast是否值得。
发布于 2021-09-08 14:15:12
编辑
显然,键入双关语是UB,所以绝对不会这样做。
(不过,给后人留下答案吧!)
为了严格回答你的问题,有这样的方法:
void foo(const unsigned char* str) {
std::cout << str << std::endl;
}
int main()
{
std::string word = "test";
//foo(word.data()); fails
union { const char* ccptr; const unsigned char* cucptr; } uword;
uword.ccptr = word.data();
foo(uword.cucptr);
}
这比reinterpret_cast
好吗?可能不会。
https://stackoverflow.com/questions/69104539
复制相似问题