Soy un desarrollador de C++ de la vieja escuela y aún hoy no tengo experiencia profesional en C++11 . Confío en el comité de C++ en que el lenguaje se está moviendo en la dirección correcta, pero parece que en los proyectos en los que trabajo el escepticismo es dominante y muchas de las características de C++11 están prohibidas incluso antes de que se entiendan y exploren.
De todos modos, ahora tengo la oportunidad de trabajar en una nueva base de código y me gustaría aplicar todo el poder de C++11, pero no quiero pegarme un tiro en el pie.
En el pasado, descubrí que algunas de las herramientas de análisis de código estático eran instrumentos de enseñanza extremadamente poderosos para mostrarme todos estos aspectos sutiles del lenguaje.
Para mi proyecto, uso bibliotecas clang y portátiles como STL y Boost que se basan en Windows, Linux, Mac y más.
Esperaba que clang-tidy , clang-modernize , etc. fueran buenas herramientas que me permitieran adaptar mi comportamiento a la característica de C++ 11, pero parecen brindar una ayuda muy limitada; literalmente, me tomó de 2 a 3 días adaptarme. a todas las sugerencias que hacen... y estoy seguro de que hay muchas posibilidades que me estoy perdiendo según las referencias de rvalue , por ejemplo.
Algunas características que me gustaría que tuviera:
Cuando la elisión de copia no es suficiente, la interfaz de reenvío proporcionará optimización.
Cuando algunos de los miembros de la clase no son móviles, no es posible generar automáticamente el constructor de movimientos y el operador de asignación de movimientos.
Cuando la variable local podría moverse si esta es la última referencia en su ámbito.
Cuando const auto&
es mejor terminar auto
.
No tengo límites de precio.
En el pasado, para el código C/C++ de la vieja escuela, usaba PC-lint , un software comercial desarrollado por Gimpel Software.
De hecho, la compañía desarrolla un par de herramientas de análisis estático: PC-lint y FlexeLint .
Pc-lint es para sistemas Windows, mientras que FlexeLint se ejecuta en casi todos los sistemas que admiten C, incluidos VMS, OS-9 y prácticamente todos los sistemas Unix.
PC-lint y FlexeLint son poderosas herramientas de análisis estático que verificarán su código fuente C/C++ y encontrarán errores, fallas, inconsistencias, construcciones no portátiles, código redundante y mucho más. Se ve en varios módulos y, por lo tanto, disfruta de una perspectiva que su compilador no tiene.
Con respecto al soporte de C++ 11, tienen una página dedicada para ello:
Soporte PC-lint / FlexeLint para C++ 11
Full support for C++11 and C++1y is our primary focus and while we cannot provide a date for full support we anticipate a quicker release cycle as we roll-out support for the remaining features.
So, at this time of writing, they don't support all the C++11 features, but most of them seem to be there. What I like is that the development status of the features is clearly and transparently reported on that page, along with a priority (for other tools, such information doesn't seem to be that clear or easily available).
For example, in your question you mentioned rvalue, which appears to be supported:
Con base en la información que puedes encontrar en el sitio web y en esa página, el costo involucrado y tu proyecto, puedes evaluar si es una herramienta que puede ajustarse a tus necesidades. Otros pueden conocer otras herramientas, esta es la que te sugiero que eches un vistazo.
Finalmente, se puede encontrar una lista de otras herramientas para el análisis de código estático C/C++ en Wikipedia . No todos son compatibles con C++11.
Puedes probar CppDepend , una herramienta de análisis estático bastante completa que integra una amplia gama de características, y 100% integrada a Visual Studio.
izzy
gsf
izzy
gsf
guassa
gsf
Mawg dice que reincorpore a Monica
gsf
guassa