我有:
unsigned char *foo();
std::string str;
str.append(static_cast<const char*>(foo()));
错误:invalid static_cast from type ‘unsigned char*’ to type ‘const char*’
在 C++ 中,这里进行强制类型转换的正确方式是什么?
我有:
unsigned char *foo();
std::string str;
str.append(static_cast<const char*>(foo()));
错误:invalid static_cast from type ‘unsigned char*’ to type ‘const char*’
在 C++ 中,这里进行强制类型转换的正确方式是什么?
char *
和const unsigned char *
是被认为无关的类型。因此您需要使用reinterpret_cast
。
但是,如果您从const unsigned char*
转换为非const
类型,则需要先使用const_cast
。 reinterpret_cast
不能去除const
或volatile
限定符。
尝试使用 reinterpret_cast
unsigned char *foo();
std::string str;
str.append(reinterpret_cast<const char*>(foo()));
reinterpret_cast
unsigned char* 基本上是一个字节数组,应该用来表示原始数据而不是字符串。Unicode字符串通常被表示为wchar_t*。
根据C++标准,unsigned char* 和char*之间的reinterpret_cast是安全的,因为它们具有相同的大小、构造和约束。一般情况下,我尽量避免使用reinterpret_cast,甚至比const_cast更少使用。
如果static_cast在您所做的事情中失败了,您可能需要重新考虑您的设计,因为如果您正在使用C++,您可能希望利用“加加”部分提供的内容,并使用string类和STL(也就是std::basic_string可能更适合您)。
由于需要回复的答案太多,因此我会在这里留下另一个答案。
在您的情况下,您可以并且应该使用reinterpret_cast<>
。
str.append(reinterpret_cast<const char*>(foo()));
您需要使用reinterpret_cast<>
,因为您要转换的两种类型彼此不相关。
const unsigned attribName = getname();
const unsigned attribVal = getvalue();
const char *attrName=NULL, *attrVal=NULL;
attrName = (const char*) attribName;
attrVal = (const char*) attribVal;