Сфера использования пространства имен - PullRequest
2 голосов
/ 02 марта 2011

После запуска следующего сегмента кода, вывод будет

Внешний.
Внутренний.
Внутренний.

Я знаю, что это об использовании«namespace», но не понимаю, почему вызов «Inner :: message ()» выводит «Inner».Спасибо за объяснение.

#include <iostream>
using namespace std;
namespace Outer
{ 
    void message( );
    namespace Inner
    {  
        void  message( );
    }
}
int main( )
{ 
    Outer::message( );
    Outer::Inner::message( );

    using namespace Outer;
    Inner::message( );

    return 0;
}

namespace Outer
{   

    void message( )
    { 
        cout<< "Outer.\n";
    }
    namespace Inner
    { 
        void message( )
        {
            cout << "Inner.\n";
        }
    }
}

Ответы [ 4 ]

11 голосов
/ 02 марта 2011

Это имеет смысл.Вы используете пространство имен Outer.Внутри пространства имен Outer у вас есть два члена ...

  • void message();
  • void Inner::message();

Вы явно ограничены Innerи позвонил туда.Почему вы ожидаете иначе?Если бы вы явно не входили в область Inner, то она бы вызвала void Outer::message();.

4 голосов
/ 02 марта 2011

Какую еще функцию можно вызвать Inner::message()?

0 голосов
/ 02 марта 2011

Ключом является строка using namespace Outer; - это в основном объединяет пространство имен Outer с глобальным пространством имен, что означает что угодно - даже другие пространства имен внутри этого - теперь напрямую доступны из глобального пространства имен, как если бы вы были одновременно в глобальных и в пространстве имен Outer.

Кстати: единственная альтернатива, если вы предполагали, что она не будет печатать «Inner»., были для кода вообще не компилировать.

0 голосов
/ 02 марта 2011

Inner::message() распечатывает "Внутренний".из-за этого

namespace Inner  
{   
    void message( )  
    {  
        cout << "Inner.\n";  
    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...