lnt-make-member-function-const
Quando una funzione membro non modifica lo stato dell'oggetto, annotarla con la const
parola chiave . Queste indicazioni provengono dalle linee guida di base di C++Con.2.
Esempio
Il linter contrassegna il codice seguente due volte perché getValue()
e getRadius()
non modifica lo stato dell'oggetto:
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;
}
Come risolvere il problema
Contrassegnare le funzioni const
membro quando non modificano lo stato dell'oggetto. In questo modo i lettori del codice e il compilatore sanno che la funzione è sicura da chiamare su un const
oggetto .
Nell'esempio seguente è const
stato aggiunto a getValue()
e 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;
}
L'editor può apportare questa modifica. Posizionare il cursore sul simbolo contrassegnato e scegliere Mostra potenziali correzioni e quindi Imposta membro const:
Il cursore si trova sulla riga int getValue() e **Mostra possibili correzioni** è apparso ed è stato scelto. Ora **Make member const** è visibile e mostra la funzione get value const aggiunta. È ora possibile scegliere **Make member const** per apportare la modifica.
Apportare questa modifica per tutte le funzioni membro contrassegnate.
Osservazioni:
Introdotto in Visual Studio 2022 17.8, questo controllo è incentrato sull'utilizzo const
delle funzioni membro nel codice C++. Le linee guida di base di C++ consigliano di contrassegnare le funzioni membro come const
quando non modificano lo stato dell'oggetto.
L'implementazione corrente di questo controllo consente di aggiungere const
alle funzioni membro dopo la dichiarazione. È consigliabile dichiarare le funzioni membro come const
dall'inizio se non modificano lo stato dell'oggetto.