4.1.11c2 Acceso a miembros de la Librería Estándar
§1 Las funciones de la Librería Estándar de C++
( 5) se han desarrollado utilizando un
subespacio específico denominado std, así que para utilizar estas funciones, además de declarar las directivas
correspondientes para incluir sus ficheros de cabecera, hay que especificar también los espacios de nombres adecuados
[1]. Esto se puede hacer de dos formas: mediante declaraciones explícitas o utilizando la directiva
using.
§1.1 Ejemplo de declaración explícita:
#include <iostream>
void main ()
{ // ================
std::cout << "Hola mundo" << std::endl;
}
§1.2 Ejemplo de directiva using:
#include <iostream>
using namespace std;
void main ()
{ // ================
cout << "Hola mundo" << endl;
}
Como la inclusión del mecanismo de espacios
de nombres es una de las adopciones más tardías de C++, los primitivos compiladores no utilizaban este recurso, es decir, las
Librerías Estándar estaban construidas al estilo del viejo C; son los clásicos ficheros de cabecera .h (las que se
adaptan al nuevo estándar no utilizan esta terminación). No obstante, por razón de compatibilidad con el código existente, los
compiladores actuales incluyen la posibilidad de utilizar "includes" de formato antiguo (ficheros de cabecera .h).
En estos casos, una declaración como:
#include <iostream.h>
Equivale a:
#include <iostream>
using namespace std;
Es decir: en un compilador que se adhiera al estándar actual, un código como el que sigue produce un error de enlazado
(cout y endl son desconocidos a pesar de estar definidos en la librería <iostream>).
#include <iostream>
void main () {
cout << "Hola mundo" << endl; // Error:
}
mientras que este otro se compila sin problema.
#include <iostream.h>
void main () {
cout << "Hola mundo" << endl;
// Ok.
}
No obstante, tenga muy presente que el fichero <iostream.h>, aunque sea soportado por algunos compiladores, no
es estándar, por lo que puede ocurrir que esta última forma no sea soportada en alguna plataforma concreta, y sea necesario acudir
a alguna de las dos formas canónicas §1.1 o §1.2 anteriores
. Lo mismo ocurre con algunas otras librerías .h,
por ejemplo <typeinfo.h>, de forma que siempre que sea posible, lo mejor es utilizar las Librerías Estándar, con lo
que a este respecto no tendremos problemas de portabilidad con nuestras aplicaciones.
[1] Esto se refiere a las librerías específicas de C++; no a las que se mantienen por compatibilidad con el antiguo C, que se encuentra definidas en ficheros de cabecera .h. Por ejemplo, la utilización de la función printf definida en <stdio.h> no requiere el uso de ningún espacio específico de nombres.