lnt-make-member-function-const
Wanneer een lidfunctie de status van het object niet wijzigt, maakt u er aantekeningen van met het trefwoord const
. Deze richtlijnen zijn afkomstig van de C++ Core Guideline Con.2.
Voorbeeld
De linter markeert de volgende code twee keer omdat getValue()
en getRadius()
de status van het object niet wijzigen:
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;
}
Het probleem oplossen
Markeer lidfuncties const
wanneer ze de status van het object niet wijzigen. Hiermee kunnen lezers van de code en de compiler weten dat de functie veilig is om een const
-object aan te roepen.
In het volgende voorbeeld is const
toegevoegd aan getValue()
en 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;
}
De editor kan deze wijziging voor u aanbrengen. Plaats de cursor op het gemarkeerde symbool en kies Mogelijke oplossingen weergeven en Lid constmaken:
De cursor bevindt zich op de regel int getValue() en **Potentiële oplossingen weergeven** verschenen en is gekozen. **Maak lid const** is nu zichtbaar en toont de functie get value met const toegevoegd. U kunt nu kiezen voor **Lid Const maken** om de wijziging aan te brengen.
Breng deze wijziging aan voor alle gemarkeerde lidfuncties.
Opmerkingen
Deze controle werd geïntroduceerd in Visual Studio 2022 17.8 en richt zich op het gebruik van const
voor lidfuncties binnen C++-code. De C++-basisrichtlijnen raden aan om lidfuncties te markeren als const
wanneer ze de status van het object niet wijzigen.
Met de huidige implementatie van deze controle kunt u const
aan lidfuncties toevoegen na de declaratie. Het is een goede gewoonte om lidfuncties te declareren als const
vanaf het begin als ze de status van het object niet wijzigen.
Zie ook
overzicht van IntelliSense-codeliner voor C++