"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué pasar un objeto constante a una función miembro no constante provoca un error de descalificación del calificador en C++?

¿Por qué pasar un objeto constante a una función miembro no constante provoca un error de descalificación del calificador en C++?

Publicado el 2025-01-14
Navegar:376

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

Pasar objetos const como argumento 'este': error de descalificación del calificador

En C, pasar objetos const como argumentos 'esto' a funciones miembro puede provocar errores de "pasar 'const xxx' ya que 'este' argumento de la función miembro descarta calificadores". Esto ocurre porque el compilador considera la posibilidad de que funciones miembro no constantes puedan modificar el objeto, lo cual está prohibido para objetos constantes.

Análisis de problemas

En el código proporcionado , los objetos del conjunto se almacenan como constante StudentT. Al acceder a las funciones miembro getId() y getName() dentro del bucle, el compilador detecta este problema ya que los objetos son constantes y las funciones miembro no están marcadas como constantes.

Solución

Para resolver el error, las funciones getId() y getName() deben hacerse constantes:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Esto permite que las funciones se invoquen en objetos constantes sin violar las reglas constantes.

Notas adicionales

  • De manera similar, el operador
inline bool operator
  • Pasar referencias (en lugar de objetos) a funciones miembro es preferible para el rendimiento y la corrección del código.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3