2011-06-24 17 views
13

Me pregunto dónde poner using namespace std;. Vi un código con el using namespace std; en el int main(){} pero lo estaba poniendo después de #include <iostream>. ¿Dónde debería ponerlo y hay alguna diferencia donde lo coloque?dónde poner usando namespace std;

+8

No lo ponga en cualquier lugar! –

+3

@Martin: Meh, eso es demasiado restrictivo. Existen muchos proyectos/archivos pequeños donde agregar 'using namespace std;' no va a causar problemas. –

+2

Absolutamente nunca, jamás lo puse en un archivo de encabezado. Lo mejor es nunca usar 'using namespace std' en ninguna parte. Estoy de acuerdo con Martin. –

Respuesta

11

Hace un enorme diferencia donde lo pones.

Si lo coloca dentro de una función, entonces solo se aplica en esa función.

Si lo coloca fuera de una función en alcance global, se aplica a todo después de ese punto.

Si lo coloca fuera de una función en alcance global en un archivo de cabecera, incluso se aplicará a cualquier archivo que incluya ese encabezado.

En general, es una mala práctica usarlo en un alcance global en un encabezado, y una práctica semi mala para usarlo en alcance global ya que en Unity builds, la distinción entre encabezados y archivos de origen es borrosa.

Lo mejor sería simplemente usarlo en las funciones que lo necesite, o incluso no usarlo en absoluto y simplemente prefijar las funciones/clases de la biblioteca estándar con std::.

13

Agregarlo dentro de una función restringe el alcance de la instrucción using a esa función solamente. Nunca debe poner una declaración using dentro de un encabezado para evitar conflictos para los usuarios de sus archivos de encabezado.

Ponerlo por encima del principal en el alcance del archivo está bien si sabe que no surgirán conflictos, pero incluso eso puede causar problemas con otros tipos importados y generalmente se debe evitar en proyectos de tamaño moderado. Intento evitar la contaminación del espacio de nombres global tanto como sea posible, pero si escribo un pequeño archivo de implementación único, agregaré un using namespace std; en la parte superior para mayor comodidad.

En su caso, suponiendo que sólo desea utilizar std::cout y std::cin (es un ejemplo), usted puede hacer esto:

using std::cout; 
using std::cin; 

Ahora se puede escribir cin >> whatever y cout << whatever sin calificar totalmente el tipo/objetar cada tiempo y también evita contaminar el espacio de nombres global.

6

La directiva using tiene un ámbito de aplicación, por lo que entrará en vigor solo dentro del ámbito en el que aparece. Úselo donde sea más apropiado para su situación.

0

Traerá todo en std en el alcance donde lo pones. Si está en el alcance del archivo, cuenta en todas partes en el archivo, si está en una función, solo se aplica dentro de la función, por lo que depende de lo que desee. Personalmente, no me gusta declarar using namespace std.

2

Si no te gusta escribir std :: todas partes (! Yo, no puedo obtener suficiente dobles y coma en mi código), la mejor práctica es importar de forma selectiva los nombres que desee en el ámbito de esta manera:

void some_function() 
{ 
    using std::vector; 

    vector<int> x; 
    ... 
} 

Está bien que también use nombres seleccionados en el alcance global.

De esta forma, no extrae TODOS los nombres en la biblioteca estándar en el espacio de nombres global.

0

Mucha gente aquí dirá que no debe usarlo en absoluto. La razón de esto es que podría haber conflictos si define accidentalmente una función que ya está en el espacio de nombres estándar, para proyectos muy grandes podría ser difícil rastrearlos. Para programas triviales, honestamente no es un gran problema, pero donde lo pones hace la diferencia.

En el ámbito global, se aplica en todas partes. En un ámbito local (es decir, solo en main()), solo se aplicará en main.

Estas son algunas alternativas buenas alternativas

  • Put std :: antes de que todo es decir, std::cout << "Hello, World!" << std::endl;
  • usar sólo la cosa específica que desee dentro de una función.

Un ejemplo del uso único que desea en una función local:

int main() 
{ 
    using std::cout; 
    using std::endl; 
    cout << "Hello, World!" << endl; 
    return 0; 
} // Obviously you need #include <iostream> at the top.. 
Cuestiones relacionadas