lnt-make-member-function-const
Quando uma função membro não modifica o estado do objeto, anote-a com a palavra-chave const
. Esta orientação vem do C++ Core Guideline Con.2.
Exemplo
O linter sinaliza o seguinte código duas vezes porque getValue()
e getRadius()
não modificam 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
Marcar funções de membro const
quando não modificam o estado do objeto. Isso permite que os leitores do código e do compilador saibam que a função é segura para chamar um objeto const
.
No exemplo a seguir, const
foi adicionado ao 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, em seguida, Tornar membro const:
.
O cursor está na linha int getValue() e **Show possíveis correções** apareceu e foi escolhido. Agora **Make member const** é visível e mostra a função get value com const adicionado a ela. Agora você pode escolher **Make member const** para fazer a alteração.
Faça essa alteração para todas as funções de membro sinalizadas.
Comentários
Introduzida no Visual Studio 2022 17.8, esta verificação concentra-se no uso de const
em funções de membro no código C++. As Diretrizes Principais do C++ recomendam marcar as funções de membro como const
quando elas não modificam o estado do objeto.
A implementação atual desta verificação permite que você adicione const
às funções de membro após sua declaração. É uma boa prática declarar funções de membro como const
desde o início se elas não modificarem o estado do objeto.