“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?
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 claseresource_t
en tu código, puedes agregar una regla de filtrado como esta:Aquí, estamos desactivando todas las comprobaciones excepto
readability
,performance
ymodernize
, y filtrando el archivo de encabezadoresource_t
utilizando la opción-header-filter
. De esta manera, clang-tidy no te advertirá sobre pasarresource_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: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.