lnt-make-member-function-const
När en medlemsfunktion inte ändrar objektets tillstånd kommenterar du det med nyckelordet const
. Den här vägledningen kommer från C++ Core Guideline Con.2.
Exempel
Linter flaggar följande kod två gånger eftersom getValue()
och getRadius()
inte ändrar objektets tillstånd:
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;
}
Så här åtgärdar du problemet
Markera medlemsfunktioner const
när de inte ändrar objektets tillstånd. Detta gör att läsare av koden och kompilatorn vet att funktionen är säker att anropa på ett const
objekt.
I följande exempel har const
lagts till i getValue()
och 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;
}
Redigeraren kan göra den här ändringen åt dig. Placera markören på den flaggade symbolen och välj Visa potentiella korrigeringar och gör:
Markören är på raden int getValue() och **Show potential fixes** dök upp och valdes. Nu är **Make member const** synligt och det visar funktionen get value med tillagd const. Du kan nu välja **Skapa medlemskonst** för att göra ändringen.
Gör den här ändringen för alla flaggade medlemsfunktioner.
Anmärkningar
Den här kontrollen introducerades i Visual Studio 2022 17.8 och fokuserar på const
användning för medlemsfunktioner i C++-kod. Riktlinjerna för C++ Core rekommenderar att medlemsfunktioner markeras som const
när de inte ändrar objektets tillstånd.
Med den aktuella implementeringen av den här kontrollen kan du lägga till const
på medlemsfunktioner efter att de har deklarerats. Det är en bra idé att deklarera medlemsfunktioner som const
från början om de inte ändrar objektets tillstånd.