O que é um "alias de espaço para nome" em C ++? Como isso é usado?
c++
namespaces
Martin B
fonte
fonte
Simplesmente, o #define não funcionará.
Compila bem. Permite contornar colisões de namespace / nome de classe.
Na última linha, "Hmm: Opa" é um erro de compilação. O pré-processador o altera para Nope :: Oops, mas Nope já é um nome de classe.
fonte
Mais sobre este tópico http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of-n
Trata-se de escolher um alias para um nome de espaço de nome longo, como:
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
Depois, você pode digitar
typedef SHORT::mytype
ao invés de
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
Essa sintaxe funciona apenas para namespaces, não pode incluir classes, tipos após o
namespace NAME =
fonte
Observe também que os aliases de namespace e o uso de diretivas são resolvidos no tempo de compilação, não no tempo de execução. (Mais especificamente, as duas ferramentas são usadas para informar ao compilador onde mais procurar ao resolver nomes, se ele não conseguir encontrar um símbolo específico no escopo atual ou em qualquer um de seus escopos pai.) Por exemplo, nenhum deles será compilar:
Agora, uma mente curiosa pode ter notado que as
constexpr
variáveis também são usadas em tempo de compilação e se pergunta se elas podem ser usadas em conjunto com um alias ou uma diretiva. Que eu saiba, eles não podem, embora eu possa estar errado sobre isso. Se você precisar trabalhar com variáveis nomeadas de forma idêntica em diferentes espaços para nome e escolher entre elas dinamicamente, seria necessário usar referências ou ponteiros.A utilidade do acima exposto pode ser limitada, mas deve servir ao propósito.
(Minhas desculpas por quaisquer erros de digitação que eu possa ter perdido no item acima.)
fonte
O espaço para nome é usado para evitar conflitos de nome.
Por exemplo:
Agora você tem duas barras de nomes de classes, que são completamente diferentes e separadas graças ao espaço para nome.
O "using namespace" que você mostra é para que você não precise especificar o namespace para usar as classes nesse namespace. ou seja, std :: string se torna string.
meu recurso: https://www.quora.com/What-is-namespace-in-C++-1
fonte