Как устранить ошибку "cppcoreguidelines-pro-type-cstyle-cast" в C ++? - PullRequest
0 голосов
/ 04 ноября 2019

Я работаю на C ++ с 64-битной Visual Studio 2015 и Clang в качестве моего компилятора.

Я попытался преобразовать string в unsigned char* с кодом ниже:

string content = "some content from file";
unsigned char* m_Test = (unsigned char*)content.c_str();

Однако это привело к ошибке при попытке построить проект:

ошибка: не использовать приведение в стиле C для преобразования между несвязанными типами [cppcoreguidelines-pro-type-cstyle-cast, -warnings-as-errors]

Есть идеи, как мне обойти это? Очень ценю, если вы можете пролить немного света.

Ответы [ 3 ]

1 голос
/ 04 ноября 2019

У вас есть два (или 3) варианта:

1) Замените приведение в стиле C на соответствующее приведение C ++ (static_cast, const_cast, reinterpret_cast или dynamic_cast).

2) (лучший вариант) Найдите способ написать свой код, где приведение не требуется в первую очередь.

3) Игнорировать / подавлять предупреждение (не то, что I рекомендовал бы, хотя является опцией).

1 голос
/ 04 ноября 2019

В современном C ++ не следует использовать стандартные приведения в cstyle, потому что они подвержены ошибкам. Чтобы иметь возможность кастовать из const char *, возвращенного методом .c_str() из string. Вы должны быть жесткими на компиляторе. Настолько, что нужен reinterpret_cast. Даже тогда вам нужно сохранить постоянство. Это также может быть отброшено. Таким образом, код будет выглядеть следующим образом:

string content = "some content from file";
const unsigned char* m_Test = reinterpret_cast<const unsigned char*>(content.c_str());

reinterpret_cast просто сообщает компилятору «Отныне обрабатывайте эти данные как указано».

0 голосов
/ 04 ноября 2019

Вы можете использовать способ приведения C ++ с static_cast:

РЕДАКТИРОВАТЬ: Как указано в комментариях, вам также нужно const_cast для вашего конкретного случая:

string content = "some content from file";
unsigned char* m_Test = static_cast<unsigned char*>(const_cast<char*>(content.c_str()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...