Por que "usando o namespace std;" considerado má prática?

I'foi dito por outros que escrever use namespace std; em código está errado, e que eu deveria utilizar std::cout e std::cin diretamente em seu lugar.

Porque é que "usar namespace std" é considerado uma má prática? É ineficiente ou corre o risco de declarar variáveis ambíguas (variáveis que compartilham o mesmo nome de uma função no espaço de nomes `std')? Isso afeta o desempenho?

Solução

Isto não está de todo relacionado com o desempenho. Mas considere o seguinte: você está usando duas bibliotecas chamadas Foo e Bar:

using namespace foo;
using namespace bar;

Tudo funciona bem, e você pode chamar Blah() de Foo e Quux() de Bar sem problemas. Mas um dia você atualiza para uma nova versão do Foo 2.0, que agora oferece uma função chamada Quux(). Agora você tem um conflito: Ambos Foo 2.0 e Bar importam Quux() para o seu namespace global. Isto vai exigir algum esforço para corrigir, especialmente se os parâmetros da função coincidirem.

Se você tivesse utilizado foo::Blah() e bar::Quux(), então a introdução de foo::Quux() teria sido um não-evento.

Comentários (39)

Outra razão é a surpresa.

Se eu vejo `cout

Comentários (5)

É tudo uma questão de gerir a complexidade. Usar o namespace vai puxar coisas que você não quer, e assim possivelmente tornar mais difícil a depuração (eu digo possivelmente). Usando std::: em todo lugar é mais difícil de ler (mais texto e tudo mais).

Cavalos para cursos - administre a sua complexidade da melhor forma que você pode e se sente capaz.

Comentários (0)