Partilhar via


Namespaces (C++)

A linguagem C++ fornece um único namespace global. Isso pode causar problemas com conflitos globais de nome. Por exemplo, considere esses dois arquivos de cabeçalho C++:

char func(char);
class String { ... };

// somelib.h
class String { ... };

Com essas definições, é impossível usar ambos os arquivos de cabeçalho em um único programa; as classes String entrarão em conflito.

Um namespace é uma região declarativa que anexa um identificador adicional a todos os nomes declarados nele. O identificador adicional torna menos provável o conflito de um nome com os nomes declarados em outro lugar no programa. É possível usar o mesmo nome em namespaces separados sem conflito, mesmo que os nomes apareçam na mesma unidade de tradução. Contato que aparecem em namespaces separados, cada nome será exclusivo devido à adição de identificador de namespace. Por exemplo:

namespace one {
   char func(char);
   class String { ... };
}

// somelib.h
namespace SomeLib {
   class String { ... };
}

No entanto, os nomes de classe não entrarão em conflito pois eles se tornam one::String e SomeLib::String, respectivamente.

O C++ não permite nomes compostos para namespaces.

// pluslang_namespace.cpp
// compile with: /c
// OK
namespace a {
   namespace b {
      int i;
   }
}

// not allowed
namespace c::d {   // C2653
   int i;
}

As declarações de arquivo no escopo de uma unidade de tradução, fora de todos os namespaces, ainda são membros do namespace global.

Que mais você deseja saber?

Consulte também

Referência

Declarações