Compartilhar via


Namespaces (C++)

A linguagem C++ fornece um único namespace global.Isso pode causar problemas com conflitos de nome global.Por exemplo, considere esses dois arquivos de cabeçalho do 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; o String classes irá conflitar.

Um espaço para nome é uma região declarativa que anexa um identificador adicional a todos os nomes declarados dentro dela.O identificador adicional torna menos provável que um nome entrarão em conflito com nomes declarados em outro lugar no programa.É possível usar o mesmo nome em espaços para nomes separados sem conflito, mesmo se os nomes aparecem na mesma unidade de conversão.Contanto que aparecem em espaços para nome separados, cada nome será exclusivo por causa da adição do identificador do espaço para nome.Por exemplo:

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

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

Agora, os nomes de classe não irá conflitar porque eles se tornam one::String e SomeLib::String, respectivamente.

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;
}

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

O que você deseja saber mais a respeito?

Consulte também

Referência

Declarações