﻿# V2558\. MISRA\. A pointer/reference parameter in a function should be declared as pointer/reference to const if the corresponding object was not modified\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Данное диагностическое правило актуально только для C\+\+\. Анализатор обнаружил, что объект передается в функцию через указатель или ссылку, но не модифицируется в теле функции\. Это может свидетельствовать о наличии ошибки\. Также в случае, если такой аргумент функции действительно не изменяется, это делает сигнатуру функции неточной\. Добавление константности объекту предотвращает потенциальные ошибки и делает определение функции более наглядным\.

Пример кода, на который анализатор выдаст предупреждение:

```cpp
size_t StringEval(std::string &str)
{
  return str.size();
}
```



Здесь переменная 'str' используется только для чтения, хотя она и передается по неконстантной ссылке\. Явная константность в сигнатуре функции позволила бы с первого взгляда понять, что функция не изменяет объект, а также предотвратить потенциальные ошибки при изменении самой функции\.



Корректный вариант кода:



```cpp
size_t StringEval(const std::string &str)
{
  return str.size();
}
```