[Veja o histórico de edições para obter uma resposta bastante diferente, agora basicamente obsoleta.]
Sim, existem alguns compiladores JIT para C e / ou C ++.
CLing (como você pode imaginar no jogo) é baseado em Clang / LLVM. Ele age como um intérprete. Ou seja, você fornece um código-fonte, um comando para que ele seja executado e ele é executado. A ênfase aqui é principalmente na conveniência e compilação rápida, e não na otimização máxima. Como tal, embora tecnicamente seja uma resposta para a pergunta em si, isso realmente não se adequa muito bem à intenção do OP.
Outra possibilidade é NativeJIT . Isso se encaixa na questão de maneira um pouco diferente. Em particular, ele não aceita código fonte C ou C ++, compila e executa. Em vez disso, é um pequeno compilador que você pode compilar no seu programa C ++. Ele aceita uma expressão que é basicamente expressa como um EDSL dentro do seu programa C ++ e gera código de máquina real a partir disso, que você pode executar. Isso se encaixa muito melhor com uma estrutura em que você pode compilar a maior parte do seu programa com um compilador normal, mas possui algumas expressões que você não conhecerá até o tempo de execução, que deseja executar com algo que se aproxime da velocidade ideal de execução.
Quanto à intenção aparente da pergunta original, acho que o ponto básico da minha resposta original ainda permanece: enquanto um compilador JIT pode se adaptar a coisas como dados que variam de uma execução para a seguinte, ou mesmo que variam dinamicamente durante uma única execução, a realidade é que isso faz relativamente pouca diferença, pelo menos como regra geral. Na maioria dos casos, executar um compilador em tempo de execução significa que você precisa renunciar bastante à otimização; portanto, o melhor que você normalmente espera é que seja quase tão rápido quanto um compilador convencional produziria.
Embora seja possível a situações postulado as informações obtidas de um compilador JIT poderia lhe permitem gerar substancialmente melhor código do que um compilador convencional, exemplos de que isso aconteça na prática parecem ser bastante incomum (e na maioria dos casos em que eu fui capaz de verificar está acontecendo, foi realmente devido a um problema no código fonte, não no modelo de compilação estática).