lnt-make-member-function-const
Если функция-член не изменяет состояние объекта, отметьте её ключевым словом const
. Это руководство исходит из основного руководства C++ Con.2.
Пример
Линтер флагует следующий код дважды, так как getValue()
и getRadius()
не изменяет состояние объекта:
class MyClass
{
public:
int getValue() { return value; } // Flagged: 'getValue' doesn't modify the object's state.
void setValue(int newValue) { value = newValue; } // OK: 'setValue' modifies the object's state.
private:
int value = 42;
};
double getRadius()
{ // Flagged: 'getRadius' doesn't modify the object's state.
return radius;
}
Устранение проблемы
Пометьте функции-члены const
, если они не изменяют состояние объекта. Это позволяет читателям кода и компилятору знать, что функция безопасна для вызова const
объекта.
В следующем примере const
добавлено и getValue()
:getRadius()
class MyClass
{
public:
int getValue() const { return value; } // Added const
void setValue(int newValue) { value = newValue; } // OK: 'setValue' modifies the object's state.
private:
int value = 42;
};
double getRadius() const // added const
{ // 'getRadius' doesn't modify the object's state.
return radius;
}
Редактор может внести это изменение. Поместите курсор на помеченный символ и выберите "Показать потенциальные исправления ", а затем сделайте элемент const:
Курсор находится в строке int getValue() и **Показать возможные исправления** и был выбран. Теперь **Сделать член const** видимым и отображает функцию получения значения с добавленным в него константом. Теперь вы можете выбрать **Сделать член const** для внесения изменений.
Внесите это изменение для всех помеченных функций-членов.
Замечания
В Visual Studio 2022 17.8 эта проверка посвящена const
использованию функций-членов в коде C++. Основные рекомендации по C++ рекомендуют пометить функции-члены так, как const
если они не изменяют состояние объекта.
Текущая реализация этой проверки позволяет добавлять const
в функции-члены после объявления. Рекомендуется объявлять функции-члены с const
самого начала, если они не изменяют состояние объекта.