Aqui tienes:
#include <iostream>
int main()
{
std::endl(std::operator<<(std::cout, "Hello world!"));
}
Al escribirlo de esta manera, evitamos las ADL propensas a errores junto con el uso de directivas y declaraciones.
Esto está destinado a ser una respuesta sarcástica. :-RE
Estoy con Herb Sutter sobre Google en este caso. De los estándares de codificación C ++:
Puede y debe usar el espacio de nombres usando declaraciones y directivas generosamente en sus archivos de implementación después de #incluir directivas y sentirse bien al respecto. A pesar de las reiteradas afirmaciones en sentido contrario, el espacio de nombres que utiliza declaraciones y directivas no es malo y no vencen el propósito de los espacios de nombres. Más bien, son los que hacen que los espacios de nombres sean utilizables .
Puede obsesionarse con los posibles conflictos de espacio de nombres que probablemente nunca se manifestarán y probablemente no serán difíciles de solucionar en un evento tan astronómicamente raro evitando cuidadosamente las using
directivas y especificando explícitamente cada cosa que usa (hasta los operadores) con using
declaraciones, o solo ve y comienza using namespace std
. Recomiendo este último desde el punto de vista de la productividad.
La mayoría de los libros de texto de C ++ enseñan a los principiantes a usar el espacio de nombres estándar; ¿Están propagando malas prácticas de codificación?
Lo contrario si me preguntas, y creo que Sutter está de acuerdo.
Ahora, en el transcurso de mi carrera, me he encontrado con un total de 3 conflictos de espacios de nombres como resultado directo de using
directivas en bases de código que abarcan decenas de millones de LOC. Sin embargo, en los 3 casos, estaban en archivos fuente que abarcaban más de 50,000 líneas de código heredado, originalmente escritas en C y luego convertidas en bastardas a C ++, realizando una lista ecléctica masiva de funciones dispares, incluyendo encabezados de una docena de bibliotecas diferentes, y teniendo una lista épica de #includes
eso abarcó una página. A pesar del desorden épico, no fueron demasiado difíciles de arreglar, ya que causaron errores de compilación en OSX (el único sistema operativo donde el código no pudo compilarse), no errores de tiempo de ejecución. No organices tu código de esta manera de pesadilla y deberías estar bien.
Dicho esto, evite las using
directivas y las declaraciones en los archivos de encabezado. Eso es simplemente retrasado. Pero para los archivos fuente, y especialmente aquellos que no tienen una página completa llena de #include
directivas, diría que no se preocupe si no está trabajando para Google.