Declaração de namespace
Uma declaração namespace identifica e atribui um nome exclusivo a um namespace declarado pelo usuário.
namespace identifier
Comentários
Esses namespaces são usados para resolver o problema de colisão de nomes em programas e bibliotecas grandes. Os programadores podem usar namespaces para desenvolver novos componentes e bibliotecas de software sem causar conflitos de nomenclatura com componentes existentes.
Por exemplo:
// namespace_declaration1.cpp
namespace X
{
int i;
double j;
}
int main()
{
X::i++;
}
A sintaxe de uma definição de namespace é:
namespace identifier
{
[ declaration-list ]
}
É possível aninhar um namespace-definition em outro namespace-definition. Cada namespace-definition deve aparecer no escopo do arquivo ou imediatamente dentro de outro namespace-definition.
Por exemplo:
// namespace_declaration2.cpp
// C2870 expected
namespace A
{
int j = 3;
int f(int k);
}
namespace Outer
{
int n = 6;
int func(int num);
namespace Inner
{
float f = 9.993;
}
}
int main()
{
namespace local // C2870: not at global scope
{
}
}
Ao contrário de outras regiões declarativas, a definição de um namespace pode ser dividida em várias partes de uma única unidade de tradução.
// namespace_declaration3.cpp
namespace A
{
// declare namespace A variables
int i;
int j;
}
namespace B
{
}
namespace A
{
// declare namespace A functions
void func(void);
int int_func(int i);
}
int main()
{
}
Quando um namespace é continuado dessa forma, após sua definição inicial, a continuação é chamada de definição de namespace de extensão. A definição original desse namespace é conhecida como uma definição de namespace original.
O uso dessa notação pode ser inconveniente com nomes mais longos ou em grandes programas. A declaração using, a política using e os alias de namespace oferecem modos mais simples de referenciar membros de namespaces.
Uma declaração namespace, quer envolva um novo namespace, um namespace não nomeado ou uma definição de namespace estendida, deverá ser acompanhada de um corpo de namespace entre chaves. A instrução
namespace X;
é um erro de sintaxe. A instrução
namespace X{};
não é um erro de sintaxe, mas não tem sentido.
Para obter informações gerais, consulte Namespaces.
O identificador em uma definição de namespace original deve ser exclusivo na região declarativa em que é usado. O identificador é o nome do namespace e é usado para referenciar seus membros.
A região declarativa de uma definição de namespace é o corpo. O corpo deve ficar entre chaves ({}) e pode conter declarações ou definições de variáveis, funções, objetos, modelos e namespaces aninhados. As declarações em declaration-list são consideradas membros do namespace. O nome de cada membro de namespace é automaticamente qualificado pelo nome do respectivo namespace e pelo operador de resolução de escopo.