кое-что о C ++ безымянном пространстве имен - PullRequest
3 голосов
/ 13 апреля 2010
#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?

Ответы [ 4 ]

3 голосов
/ 13 апреля 2010

Нет, вы не можете. Вы можете обойти это таким образом:

namespace
{
    namespace xxx
    {
        int a = 1;
    }
}
...
std::cout << xxx::a << ::b;
3 голосов
/ 13 апреля 2010

:: в ::a относится к глобальному пространству имен. Доступ к анонимному пространству имен можно получить только с помощью a (или, если быть более точным, вы не должны делать это вообще)

2 голосов
/ 13 апреля 2010

Используя безымянные пространства имен, это невозможно. См. Статью ниже

http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/unnamed_namespaces.htm

Вы должны использовать именованные пространства имен.

0 голосов
/ 13 апреля 2010

Вы можете получить доступ к глобальному пространству имен, но не переопределять его.

#include <iostream>

namespace
{
        int a=1;
}


int b=3;

int main(void)
{
        std::cout<<::a<<::b;
    return 0;
}

здесь - 13.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...