¿Qué es un "alias de espacio de nombres" en C ++? ¿Cómo se usa?
c++
namespaces
Martin B
fuente
fuente
Simplemente, el #define no funcionará.
Compila bien. Le permite evitar colisiones de nombres de clase / espacio de nombres.
En la última línea, "Hmm: Vaya" es un error de compilación. El preprocesador lo cambia a Nope :: Oops, pero Nope ya es un nombre de clase.
fuente
Más sobre este tema http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of-n
Se trata de elegir un alias para un nombre de espacio de nombres muy largo, como:
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
Luego, más tarde, puede escribir def
typedef SHORT::mytype
en vez de
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
Esta sintaxis solo funciona para espacios de nombres, no puede incluir clases, tipos después de
namespace NAME =
fuente
También tenga en cuenta que los alias de espacio de nombres y el uso de directivas se resuelven en tiempo de compilación, no en tiempo de ejecución. (Más específicamente, ambas herramientas se usan para indicarle al compilador dónde más buscar al resolver nombres, si no puede encontrar un símbolo en particular en el alcance actual o en cualquiera de sus ámbitos principales). Por ejemplo, ninguno de estos compilar:
Ahora, una mente curiosa puede haber notado que las
constexpr
variables también se usan en el momento de la compilación, y se pregunta si pueden usarse junto con un alias o una directiva. Que yo sepa, no pueden, aunque puedo estar equivocado sobre esto. Si necesita trabajar con variables con nombres idénticos en diferentes espacios de nombres y elegir dinámicamente entre ellas, deberá usar referencias o punteros.La utilidad de lo anterior puede ser limitada, pero debe cumplir el propósito.
(Mis disculpas por cualquier error tipográfico que me haya perdido en lo anterior).
fuente
El espacio de nombres se usa para evitar conflictos de nombres.
Por ejemplo:
Ahora tiene una barra de nombre de dos clases, que son completamente diferentes y separadas gracias al espacio de nombres.
El "uso del espacio de nombres" que muestra es para que no tenga que especificar el espacio de nombres para usar clases dentro de ese espacio de nombres. es decir, std :: string se convierte en string.
mi recurso: https://www.quora.com/What-is-namespace-in-C++-1
fuente