Что такое «псевдоним пространства имен» в C ++? Как это используется?
c++
namespaces
Мартин Б
источник
источник
Проще говоря, #define не будет работать.
Компилирует нормально. Позволяет работать с конфликтами имен пространств / классов.
В последней строке "Hmm: Oops" - ошибка компиляции. Препроцессор меняет его на Nope :: Oops, но Nope уже является именем класса.
источник
Больше на эту тему http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of-n
Все дело в выборе псевдонима для длинного имени пространства имен, такого как:
namespace SHORT = NamespaceFirst::NameSpaceNested::Meow
Затем позже вы можете набрать
typedef SHORT::mytype
вместо того
typedef NamespaceFirst::NameSpaceNested::Meow::mytype
Этот синтаксис работает только для пространств имен, не может включать классы, типы после
namespace NAME =
источник
Также обратите внимание, что псевдонимы пространства имен и использование директив разрешаются во время компиляции, а не во время выполнения. (Точнее, оба они используются для указания компилятору, где еще искать при разрешении имен, если он не может найти определенный символ в текущей области или какой-либо из своих родительских областей.) Например, ни один из них не будет компиляции:
Теперь любопытный ум мог заметить, что
constexpr
переменные также используются во время компиляции, и задаться вопросом, могут ли они использоваться в сочетании с псевдонимом или директивой. Насколько мне известно, они не могут, хотя я могу ошибаться по этому поводу. Если вам нужно работать с переменными с одинаковыми именами в разных пространствах имен и выбирать между ними динамически, вам придется использовать ссылки или указатели.Полезность вышесказанного может быть ограничена, но она должна служить цели.
(Мои извинения за любые опечатки, которые я, возможно, пропустил выше.)
источник
Пространство имен используется для предотвращения конфликтов имен.
Например:
Теперь у вас есть две строки имен классов, которые совершенно разные и отдельные благодаря пространству имен.
«Использование пространства имен», которое вы показываете, заключается в том, что вам не нужно указывать пространство имен для использования классов в этом пространстве имен. то есть std :: string становится строкой.
мой ресурс: https://www.quora.com/What-is-namespace-in-C++-1
источник