使用命名空间的范围

时间:2011-03-02 04:45:13

标签: c++ namespaces

运行以下代码段后,输出为

  

外。
  内蒙古
  内。

我知道这是关于“命名空间”的用法,但不明白为什么“Inner :: message()”的调用打印出“内部”。谢谢你的解释。

#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 个答案:

答案 0 :(得分:11)

这很有道理。您正在使用名称空间Outer。在命名空间Outer内,您有两个成员......

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

你明确地限定了Inner并在那里调用了消息。你为什么不这么想?如果你没有明确确定Inner的范围,那么就会调用void Outer::message();

答案 1 :(得分:4)

Inner::message()可能会调用哪些其他功能?

答案 2 :(得分:0)

Inner::message()打印出“内部”。因为这个

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

答案 3 :(得分:0)

它们的键是行using namespace Outer; - 这基本上将命名空间Outer与全局命名空间合并,这意味着任何东西 - 甚至其他命名空间 in 那个 - 现在直接可以从全局命名空间访问,就像您同时在Outer命名空间中的全局一样。

顺便说一句:唯一的另一种选择,如果你认为它不会打印“内部。”,则代码根本不能编译。