4. 名字空间嵌套声明

在声明名字空间时,可以实现嵌套声明,即名字空间内仍然可以再声明内部更深一层的名字空间,可以实现多层名字空间的声明。

示例:

Outer 名字空间内部嵌套声明 Innter 名字空间。

namespace Outer {
    int total = 100;
    void print_total(void) { std::cout << total << std::endl; }
    namespace Inner {
        int sub_count = 0;
        void other(void) {
            std::cout << "this is Inner namespace" << std::endl;
        }
    }
}

当有嵌套声明的名字空间时,可以使用作用域限定符(::) 来指定名字空间内部的标识符,也可以使用 using 或者 using namespace 来指定一个或全部标识符。用法几乎和没有嵌套的名字空间的用法一致。如:

  1. 使用作用域限定符访问名字空间内的标识符。
std::cout << Outer::total << std::endl;
Outer::print_total();

std::cout << Outer::Inner::sub_count << std::endl;
Outer::Inner::other();
  1. 使用 using 使用名字空间中的标识符
using Outer::total;
using Outer::print_total;
std::cout << total << std::endl;
print_total();

using Outer::Inner::sub_count;
using Outer::Inner::other;
std::cout << sub_count << std::endl;
other();
  1. 使用 using namespace 使用名字空间中的标识符
using namespace Outer;
std::cout << total << std::endl;
print_total();

using namespace Outer::Inner;
std::cout << sub_count << std::endl;
other();