运行以下代码段后,输出为
外。
内蒙古
内。
我知道这是关于“命名空间”的用法,但不明白为什么“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";
}
}
}
答案 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
命名空间中的全局和一样。
顺便说一句:唯一的另一种选择,如果你认为它不会打印“内部。”,则代码根本不能编译。