es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“El parámetro se pasa por valor y solo se copia una vez; considere moverlo” – Evite esto para los tipos de referencia.

Estoy escribiendo código C++ en CLion 2021.3, que utiliza comprobaciones de clang-tidy.

En mi código, tengo una clase de referencia ligera; digamos que se ve así:

struct resource_t {
    uint8_t kind;
    int id;
}

Ahora, cuando paso un objeto resource_t alrededor, quiero pasarlo por valor. No hay razón para usar referencias a él, ni moverlo, ni nada por el estilo. Sin embargo, a clang-tidy no le gusta esto. Entonces se queja de mis funciones que toman resource_t por valor, y de pasarlos por valor a estas funciones. Siempre me sugiere que haga que los parámetros sean const resource_t&, y en algunos casos que considere pasar std::move(my_resource) si ese es el único uso de my_resource en la función.

Ahora bien, estas advertencias son válidas para clases “pesadas”, pero no para esta. ¿Hay alguna manera, con CLion o en general con clang-tidy, de hacer que clang-tidy distinga entre el caso “pesado” y el caso “ligero”? ¿O tal vez agregar a una lista blanca algunos tipos específicos?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de configurar las comprobaciones de clang-tidy para ignorar clases ligeras como resource_t. En Clang-Tidy, puedes utilizar las opciones -header-filter y -line-filter para filtrar archivos, líneas o regiones de código específicas que no deben ser comprobadas. Por ejemplo, para ignorar la clase resource_t en tu código, puedes agregar una regla de filtrado como esta:

    -checks=-*,readability-*,performance-*,modernize-*,
      -readability-redundant-member-init,
      -header-filter=resource_t
    

    Aquí, estamos desactivando todas las comprobaciones excepto readability, performance y modernize, y filtrando el archivo de encabezado resource_t utilizando la opción -header-filter. De esta manera, clang-tidy no te advertirá sobre pasar resource_t por valor o parámetros de valor para esta clase.

    Alternativamente, también puedes usar un comentario // NOLINT después de tu declaración de función o parámetro para indicarle a clang-tidy que ignore esa línea o bloque de código específico:

    void my_function(resource_t my_resource) // NOLINT
    {
        ...
    }
    

    De esta manera, clang-tidy no te advertirá por esta declaración de parámetro específica.

    En general, es importante recordar que las advertencias de clang-tidy son medidas de orientación más que reglas estrictas, y depende del programador decidir si seguirlas o no. Si consideras que pasar resource_t por valor es la elección más apropiada para tu caso, puedes utilizar uno de los métodos mencionados anteriormente para suprimir las advertencias para esta clase en particular.

Comments are closed.