Приведение стиля C++ от unsigned char * до const char *



Я:



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++?

708   6  

6 ответов:

оператора reinterpret_cast

char * и const unsigned char * считаются несвязанными типами. Так что вы хотите использовать reinterpret_cast.

но если бы вы шли от const unsigned char* до const тип вам нужно использовать const_cast первый. reinterpret_cast не может отбросить a const или volatile квалификация.

попробовать reinterpret_cast

unsigned char *foo();
std::string str;
str.append(reinterpret_cast<const char*>(foo()));

unsigned char* в основном является массивом байтов и должен использоваться для представления необработанных данных, а не строки в целом. Строка Юникода будет представлена как wchar_t*

согласно стандарту C++ reinterpret_cast между unsigned char* и char* безопасен, поскольку они имеют одинаковый размер и имеют одинаковую конструкцию и ограничения. Я стараюсь избегать reintrepret_cast даже больше, чем const_cast в целом.

Если статическое приведение не удается с тем, что вы делаете вы возможно, вы захотите пересмотреть свой дизайн, потому что, честно говоря, если вы используете C++ , вы можете воспользоваться тем, что предлагает часть "плюс плюс", и использовать классы строк и STL (aka std::basic_string может работать лучше для вас)

вам нужно будет использовать reinterpret_cast<> поскольку два типа, между которыми вы проводите кастинг, не связаны друг с другом.

надеюсь, что это поможет. :)

const unsigned attribName = getname();
const unsigned attribVal = getvalue();
const char *attrName=NULL, *attrVal=NULL;
attrName = (const char*) attribName;
attrVal = (const char*) attribVal;

Comments

    Ничего не найдено.