Sdílet prostřednictvím


lnt-make-member-function-const

Pokud členská funkce nezmění stav objektu, označte ji klíčovým slovem const . Tyto pokyny pocházejí z C++ Core Guideline Con.2.

Příklad

Linter označuje následující kód dvakrát, protože getValue() a getRadius() neupravuje stav objektu:

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; 
} 

Způsob vyřešení problému

Členské funkce const označte, když neupravují stav objektu. Čtenáři kódu a kompilátoru tak vědí, že funkce je bezpečná pro volání objektu const .

V následujícím příkladu const byl přidán do getValue() a 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; 
}  

Editor může tuto změnu provést za vás. Umístěte kurzor na symbol s příznakem a zvolte Zobrazit potenciální opravy a poté nastavit člena const:

Snímek obrazovky s editorem, který navrhuje, aby člen const

Kurzor je na řádku getValue() a **Zobrazit potenciální opravy** a byl vybrán. Nyní je funkce **Make member const** viditelná a zobrazuje funkci get value s přidanou funkcí const. Teď můžete zvolit **Nastavit člena const** a provést změnu.

Proveďte tuto změnu pro všechny členské funkce označené příznakem.

Poznámky

Tato kontrola se v sadě Visual Studio 2022 17.8 zaměřuje na const využití členských funkcí v kódu jazyka C++. C++ Core Guidelines doporučuje označit členské funkce, jako const když neupravují stav objektu.

Aktuální implementace této kontroly umožňuje přidat const do členských funkcí po jejich deklaraci. Je vhodné deklarovat členské funkce jako const od začátku, pokud neupravují stav objektu.

Viz také

Přehled linter kódu IntelliSense pro C++