#include <iostream> namespace { int a=1; } int a=2,b=3; int main(void) { std::cout<<::a<<::b; return 0; }
Я завершаю это с помощью моего g ++, но вывод равен 23, кто может это объяснить? это способ получить доступ к <unnamed> namespace ::a?
<unnamed> namespace ::a
Нет, вы не можете. Вы можете обойти это таким образом:
namespace { namespace xxx { int a = 1; } } ... std::cout << xxx::a << ::b;
:: в ::a относится к глобальному пространству имен. Доступ к анонимному пространству имен можно получить только с помощью a (или, если быть более точным, вы не должны делать это вообще)
::
::a
a
Используя безымянные пространства имен, это невозможно. См. Статью ниже
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/unnamed_namespaces.htm
Вы должны использовать именованные пространства имен.
Вы можете получить доступ к глобальному пространству имен, но не переопределять его.
#include <iostream> namespace { int a=1; } int b=3; int main(void) { std::cout<<::a<<::b; return 0; }
здесь - 13.