Diferencia entre iostream y iostream.h

¿Cuál es la diferencia entre iostream y iostream.h ?

iostream.h está en desuso debido a los comstackdores que lo proporcionan, iostream es parte del estándar de C ++.

Para aclarar explícitamente, no hay ninguna mención de iostream.h en absoluto en el estándar actual de C ++ (INCITS ISO IEC 14882 2003).

Editar: Como mencionó @Jerry, no solo el estándar actual no lo menciona, pero ningún estándar para C ++ lo menciona.

iostream es un encabezado estándar. iostream.h es un encabezado no estándar que era muy común en C ++ pre-estándar, y es de lo que evolucionó iostream. Todavía es común tener iostream.h, presumiblemente para usarlo con progtwigs anteriores.

Si su implementación tiene una copia de trabajo de iostream.h, es probablemente lo mismo que iostream, excepto que todo en iostream está en el std nombres std , mientras que iostream.h generalmente precedió a los espacios de nombres y no los usó.

Si su implementación tiene tanto iostream como iostream.h, es probable que iostream funcione de la siguiente manera:

 namespace std { #include  } 

aunque eso no es necesariamente como está escrito.

Cuando se creó C ++ por primera vez, todos los archivos de la biblioteca de tiempo de ejecución estándar terminaron en .h. La vida fue consistente y fue buena. La versión original de cout y cin vivía en iostream.h. Cuando el lenguaje fue estandarizado por el comité ANSI, decidieron mover todas las funciones en la biblioteca de tiempo de ejecución al espacio de nombres estándar (que generalmente es una buena idea). Sin embargo, esto presentaba un problema: si trasladaban todas las funciones al espacio de nombres estándar, ¡ninguno de los progtwigs anteriores funcionaría más!

Para tratar de evitar este problema, manteniendo compatibilidad con versiones anteriores para progtwigs anteriores, se introdujo un nuevo conjunto de archivos de encabezado que usan los mismos nombres pero carecen de la extensión .h. Estos nuevos archivos de encabezado tienen toda su funcionalidad dentro del espacio de nombres estándar. De esta forma, los progtwigs más antiguos que incluyen #include no necesitan ser reescritos, y los progtwigs más nuevos pueden #include .

Cuando incluye un archivo de encabezado de la biblioteca estándar, asegúrese de usar la versión que no sea .hsi existe. De lo contrario, utilizará una versión obsoleta del encabezado que ya no es compatible.

Además, muchas de las bibliotecas heredadas de C que todavía eran útiles en C ++ recibieron un prefijo de CA (por ejemplo, stdlib.h se convirtió en cstdlib). La funcionalidad de estas bibliotecas también se movió al espacio de nombres estándar para ayudar a evitar el nombramiento de colisiones.

Sin embargo, cuando escribe sus propios archivos de encabezado, debe darles una extensión .h, ya que no colocará su código en el espacio de nombres estándar.

Regla: use la versión no .h de una biblioteca, si existe, y acceda a la funcionalidad a través del espacio de nombres estándar. Si la versión que no es .h no existe, o si está creando sus propios encabezados, use la versión .h