Поделиться через


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 самого начала, если они не изменяют состояние объекта.

См. также

Обзор анализатора кода IntelliSense для C++