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.

¿Cuál es el tipo correcto de cast de C++ aquí?

Me gustan/odio los linters, así que pensé en probar “clang-tidy” con todas las verificaciones activadas para ver cómo me va y cómo puedo mejorar. Aparte de las reglas estilísticas o no aplicables, me encontré con esta llamada:

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)0);

que activa “Los lanzamientos de estilo C no están permitidos; use static_cast/const_cast/reinterpret_cast [google-readability-casting]”, así que lo corregí con un static_cast<void*>(nullptr) por si acaso. Luego, ingenuamente, “corregí” lo siguiente:

glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), static_cast<void*>(3 * sizeof(float)));

lo cual es un error real porque no se puede convertir un “unsigned long” a “void*”. De acuerdo, mi error. Pensé que un “unsigned long” era un buen candidato para un “reinterpret_cast”, así que lo hice y se compiló y se ejecutó bien, excepto que las “Pautas Básicas de C++” dicen “no usar reinterpret_cast [cppcoreguidelines-pro-type-reinterpret-cast]”.

Fuera de “dynamic_cast”, que es un poco absurdo en este caso, ¿cuáles son mis opciones aquí?</void></void>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c++, opengl, casting, y específicamente familiarizado con la herramienta clang-tidy, se recomienda evitar el uso de castings de estilo C y reinterpret_cast en el código.

    En el escenario mencionado, el primer error activado por clang-tidy está relacionado con el uso de un casting de estilo C, que puede ser reemplazado por static_cast, const_cast o reinterpret_cast, según corresponda. En este caso, usar static_cast con nullptr resultó ser una opción adecuada.

    Sin embargo, el segundo error está relacionado con el casting de un unsigned long a void *, lo cual no se puede hacer utilizando ninguno de los métodos de casting estándar en C++ (incluyendo static_cast, dynamic_cast, const_cast). En este caso, reinterpret_cast parece ser la única opción, pero viola las “Pautas principales de C++”.

    Por lo tanto, se recomienda evitar este tipo de escenarios desde un principio utilizando los tipos correctos y asegurándose de que los datos estén formateados correctamente. Alternativamente, tal vez sea necesario considerar un enfoque diferente en el código, como utilizar un tipo de dato diferente o revisar el diseño del código.

Comments are closed.