Hace años creía que C era absolutamente puro en comparación con C++ porque el compilador no podía generar ningún código que no pudieras predecir. Ahora creo que los ejemplos de contador incluyen la palabra clave volatile
y las barreras de memoria (en programación multiprocesador o controladores de dispositivo para dispositivos de hardware mapeados en memoria, donde el lenguaje de ensamblaje simple sería incluso más puro que las optimizaciones de un compilador de C).Formas de crear accidentalmente objetos temporales en C++?
Por el momento estoy tratando de enumerar las cosas impredecibles que un compilador de C++ puede hacer. La principal queja que tengo en mente acerca de C++ es que el compilador instanciará implícitamente objetos temporales, pero creo que todos estos casos pueden esperarse. Los casos que estoy pensando son:
- cuando una clase define un constructor de copia para un tipo distinto de sí mismo, sin necesidad de utilizar la palabra clave
explicit
- cuando una clase define un operador de conversión sobrecargado:
operator()
- cuando una función acepta un objeto por valor en lugar de por referencia
- cuando una función devuelve un objeto por valor en lugar de por referencia
son la re otros?
+1: interesante cuando se trata de sistemas embebidos. – jldupont
Todos estos están definidos en el estándar y, por lo tanto, pueden predecirse; los que no se pueden predecir son un comportamiento indefinido – Mark
En C tiene conversiones implícitas (conversiones), por lo que no diría que es "puro". – Manuel