я получаю эти ошибки в PC-Lint (аи-Мишра-cpp.lnt):Как использовать std :: transform без нарушения MISRA C++ 2008 Консультативное правило 5-2-10?
ConverterUtil.cpp (90): ошибка 864: (Info - выражение с переменной 'transformValue' зависит, возможно о порядке оценки [MISRA C++ Правило 5-2-10])
ConverterUtil.cpp (90): ошибка 864: (Info - выражение с переменной 'transformValue' возможно, зависит от порядка оценки [ MISRA C++ Правило 5-2-10])
ConverterUtil.cpp (90): ошибка 534 (Внимание: - Не обращая внимания на возвращаемое значение функции «станд :: преобразование (станд :: _ String_iterator >>, станд :: _ String_iterator >>, станд :: _ String_iterator >>, int (*) (int)) '(сравнить с линией 998, файл C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ include \ algorithm) [MISRA C++ Правила 0-1- 7 и 8-4-6], [MISRA C++ Правило 0-3-2])
В этом коде:
/**Conversion from std::string to bool*/
bool ConverterUtil::ConvertStdStringToBool(const std::string value)
{
std::string transformValue = value;
bool retValue = false;
std::transform(transformValue.begin(), transformValue.end(), transformValue.begin(), &::tolower);
if(transformValue == std::string(static_cast<const char *>("true")))
{
retValue = true;
}
return retValue;
}
Я догадался, что мне не нравится тот факт, что я использую ту же std :: string, что и вход и выход в преобразовании, но использование другой строки в качестве вывода дает ту же ошибку.
Можно ли выполнить преобразование std :: transform MISRA?
Несвязанный, но поскольку вы передаете значение 'value' в свою функцию, локаль' tranformValue' не используется. У вас уже есть временная копия в 'value'. Вы можете отказаться от 'const' в параметре и использовать' value' в своем коде вместо 'tranformValue' (хотя я бы сохранил его как-есть, но сделав параметр const-ref). – WhozCraig
Возможно, он хочет, чтобы вы скопировали итераторы 'begin()' и 'end() и передали копии в' std :: transform'. – juanchopanza
Если вы хотите нечувствительность к регистру, посмотрите здесь много ответов http://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-c –