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:
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.