lnt-make-member-function-const
Quando uma função membro não modificar o estado do objeto, anote-a com a palavra-chave const
. Essas diretrizes foram extraídas das Diretrizes Principais do C++: Con.2.
Exemplo
O linter sinaliza o seguinte código duas vezes porque getValue()
e getRadius()
não modifica o estado do objeto:
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;
}
Como corrigir o problema
Marque as funções membro como const
quando elas não modificarem o estado do objeto. Isso permite que os leitores do código e o compilador saibam que é seguro chamar a função em um objeto const
.
No seguinte exemplo, const
foi adicionado 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;
}
O editor pode fazer essa alteração para você. Coloque o cursor sobre o símbolo sinalizado e escolha Mostrar possíveis correções e Tornar o membro const:
O cursor está na linha int getValue() e a opção **Mostrar possíveis correções** foi exibida e escolhida. Agora **Tornar o membro const** está visível e mostra a função get value com a adição de const a ela. Agora você pode escolher **Tornar o membro const** para fazer a alteração.
Faça essa alteração em todas as funções membro sinalizadas.
Comentários
Introduzida no Visual Studio 2022 17.8, essa verificação tem como foco o uso de const
nas funções membro no código C++. As Diretrizes Principais do C++ recomendam marcar as funções membro como const
quando elas não modificam o estado do objeto.
A implementação atual dessa verificação permite que você adicione const
às funções membro após a declaração. É uma boa prática declarar as funções membro como const
desde o início, caso elas não modifiquem o estado do objeto.