Pasando por alto una gran cantidad de detalles, en Java compila archivos .java en uno o más archivos .class. En C++, compila archivos fuente .cc (o lo que sea) en archivos .o, y luego vincula los archivos .o en un archivo ejecutable o biblioteca. El proceso de vinculación es generalmente lo que lo mata, especialmente para cambios menores, ya que la cantidad de trabajo para vincular es más o menos proporcional al tamaño de todo el proyecto.(Esto está ignorando los enlaces incrementales, que están diseñados específicamente para no comportarse tan mal para pequeños cambios)
Otro factor es que el mecanismo #include significa que cada vez que cambie un archivo .h, todos los archivos .o que dependen en eso necesita ser reconstruido. En Java, un archivo .class puede depender de más de un archivo .java (por ejemplo, debido a la constante creación de líneas), pero tienden a haber muchos menos de estos "puntos calientes" donde cambiar un archivo fuente requiere muchos otros archivos fuente para ser reconstruido.
Además, si está utilizando un IDE como Eclipse, está construyendo su código de Java en segundo plano todo el tiempo, por lo que cuando le diga que compile ya está hecho (si no completamente) en su mayoría.
Lea la respuesta de jalf aquí: http://stackoverflow.com/questions/318398/why-does-c-compilation-take-so-long –
Es un problema de QoI (calidad de implementación). Algunos compiladores de C++ implementan "encabezados precompilados", lo que hace que la compilación sea mucho más rápida. –
La misma pregunta que http://stackoverflow.com/questions/318398/why-does-c-compilation-take-so-long –