
paulo1205
(usa Ubuntu)
Enviado em 16/02/2018 - 19:34h
silas333 escreveu:
Eu ouvi falar que é uma má pratica da programação usar o "using namespace std" em arquivos .H
Isso é verdade ?
É verdade.
Porque se deve Evitar ?
Porque se você tiver essa linha dentro de um cabeçalho, você embute essa diretiva necessariamente em todo arquivo que incluir esse cabeçalho, limitando o poder de escolha do seu usuário.
Além disso, é um princípio de organização razoavelmente bem difundido e aceito que é bom limitar a visibilidade de símbolos aos locais em que eles são necessários. Isso tem muitas aplicações, inclusive a de evitar conflitos entre nomes relativamente comuns (por exemplo: “
string”, “
regex” etc.), especialmente em casos em que acontecem misturas entre módulos compilados em C e módulos compilados em C++.
E em arquivos .cpp ?
Arquivos que contêm implementações (não apenas com sufixo “.cpp”, mas também outros, como “.cc” ou “.C”) normalmente são alvos diretos de compilação, e não são incluídos por outros arquivos. Nesses casos, o risco de expor uma quantidade muito grande de símbolos fica reduzido a apenas aqueles arquivos finais, sem espalhar-se.
No entanto, existem alguns casos em que implementações podem ser incluídas por outros arquivos, e dentre esses se destacam os de implementações de templates (que comumente têm extensão “.tcc”). Nesses casos, também não é bom impor a diretiva dentro do arquivo a ser incluído.
Isso vale para todos os sistemas operacionais ?
Sim. Não tem nada a ver com S.O., mas sim com a linguagem.
Será que o correto é usar o "std::" em tudo ?
Não. Há casos em que não se agrega valor, mas apenas se escreve mais. Como tudo na vida, é uma questão de usar o bom senso.