[Vedi la cronologia delle modifiche per una risposta abbastanza diversa che ora è sostanzialmente obsoleta.]
Sì, ci sono un paio di compilatori JIT per C e / o C ++.
CLing (come puoi immaginare dal gioco) si basa su Clang / LLVM. Si comporta come un interprete. Cioè, gli dai un po 'di codice sorgente, gli dai un comando per l'esecuzione, e viene eseguito. L'enfasi qui è principalmente sulla convenienza e sulla compilazione veloce, non sulla massima ottimizzazione. In quanto tale, sebbene tecnicamente una risposta alla domanda stessa, ciò non soddisfa molto bene l'intento del PO.
Un'altra possibilità è NativeJIT . Questo si adatta alla domanda in modo leggermente diverso. In particolare, non accetta il codice sorgente C o C ++, lo compila e lo esegue. Piuttosto, è un piccolo compilatore che puoi compilare nel tuo programma C ++. Accetta un'espressione che è sostanzialmente espressa come EDSL all'interno del tuo programma C ++ e genera il codice macchina effettivo da quello, che puoi quindi eseguire. Questo si adatta molto meglio a un framework in cui è possibile compilare la maggior parte del programma con un normale compilatore, ma avere alcune espressioni che non si conosceranno fino al runtime, che si desidera eseguire con qualcosa che si avvicina alla velocità di esecuzione ottimale.
Per quanto riguarda l'intento apparente della domanda originale, penso che il punto fondamentale della mia risposta originale sia ancora valido: mentre un compilatore JIT può adattarsi a cose come i dati che variano da un'esecuzione alla successiva, o anche variare dinamicamente durante una singola esecuzione, la realtà è che questo fa relativamente poca differenza almeno come regola generale. Nella maggior parte dei casi, eseguire un compilatore in fase di esecuzione significa che è necessario rinunciare a un bel po 'di ottimizzazione, quindi il meglio che si spera di solito è che sia vicino alla velocità che un compilatore convenzionale produrrebbe.
Sebbene sia possibile postulare situazioni in cui le informazioni disponibili per un compilatore JIT potrebbero consentire di generare un codice sostanzialmente migliore rispetto a un compilatore convenzionale, i casi in cui ciò accade nella pratica sembrano piuttosto insoliti (e nella maggior parte dei casi in cui sono stato in grado di verificare sta accadendo, era davvero a causa di un problema nel codice sorgente, non con il modello di compilazione statica).