"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que passar um objeto Const para uma função de membro não Const causa um erro de desqualificação do qualificador em C++?

Por que passar um objeto Const para uma função de membro não Const causa um erro de desqualificação do qualificador em C++?

Publicado em 14/01/2025
Navegar:328

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

Passando objetos Const como argumento 'this': erro de desqualificação do qualificador

Em C , passando objetos const como argumentos 'this' para funções de membro pode resultar em erros "passar 'const xxx' como 'este' argumento da função membro descarta qualificadores". Isso ocorre porque o compilador considera a possibilidade de que funções de membro não const possam modificar o objeto, o que é proibido para objetos const.

Análise de problemas

No código fornecido , os objetos no conjunto são armazenados como const StudentT. Ao acessar as funções membro getId() e getName() dentro do loop, o compilador detecta esse problema, pois os objetos são const e as funções membro não são marcadas como const.

Solution

Para resolver o erro, as funções getId() e getName() devem ser tornadas const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Isso permite que as funções sejam chamadas em objetos const sem violar as regras const.

Notas adicionais

  • Da mesma forma, o operador
inline bool operator
  • Passar referências (em vez de objetos) para funções de membro é preferível para desempenho e correção de código.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3