[Ver el historial de edición para una respuesta bastante diferente que ahora es básicamente obsoleta.]
Sí, hay un par de compiladores JIT para C y / o C ++.
CLing (como se puede deducir del juego) se basa en Clang / LLVM. Actúa como un intérprete. Es decir, le das un código fuente, le das un comando para que se ejecute y se ejecuta. El énfasis aquí está principalmente en la conveniencia y la compilación rápida, no en la optimización máxima. Como tal, aunque técnicamente es una respuesta a la pregunta en sí, esto realmente no se ajusta muy bien a la intención del OP.
Otra posibilidad es NativeJIT . Esto se ajusta a la pregunta de manera algo diferente. En particular, no acepta el código fuente C o C ++, y lo compila y ejecuta. Más bien, es un pequeño compilador que puede compilar en su programa C ++. Acepta una expresión que se expresa básicamente como un EDSL dentro de su programa C ++, y genera un código de máquina real a partir de eso, que luego puede ejecutar. Esto encaja mucho mejor con un marco en el que puede compilar la mayor parte de su programa con un compilador normal, pero tiene algunas expresiones que no sabrá hasta el tiempo de ejecución, que desea ejecutar con algo que se aproxime a la velocidad de ejecución óptima.
En cuanto a la aparente intención de la pregunta original, creo que el punto básico de mi respuesta original sigue en pie: mientras que un compilador JIT puede adaptarse a cosas como datos que varían de una ejecución a la siguiente, o incluso varían dinámicamente durante una sola ejecución, la realidad es que esto hace relativamente poca diferencia, al menos como regla general. En la mayoría de los casos, ejecutar un compilador en tiempo de ejecución significa que debe renunciar a un poco de optimización, por lo que lo mejor que generalmente espera es que sea casi tan rápido como lo produciría un compilador convencional.
Aunque es posible postular situaciones en las que la información disponible para un compilador JIT podría permitirle generar un código sustancialmente mejor que un compilador convencional, las instancias de que esto suceda en la práctica parecen ser bastante inusuales (y en la mayoría de los casos donde he podido verificar está sucediendo, realmente se debió a un problema en el código fuente, no con el modelo de compilación estática).