上一篇 using声明、using指示及其作用域详解 说的是函数内部或者全局作用域中使用using声明和using指示的情况,这里说的是在嵌套命名空间中使用using声明与using指示的情况。
//named_namespace.h 命名空间成员声明与定义头文件
#ifndef NAME_17_2_3
#define NAME_17_2_3
namespace name_17_2_3
{
class AA //类AA的定义,例子中用不到,忽略它
{
AA() {}
};
extern int name_17_2_3_fun(); //函数fun声明,定义在命名空间实现文件中
extern int i; //同上
namespace BB
{
extern int i; //函数fun声明,定义在命名空间实现文件中
}
}
#endif
1. 嵌套命名空间中的using声明:
嵌套命名空间中的using声明也比较简单,被using声明的名字是局部的,从using声明点开始,到包含该声明的作用域的结尾处可见,外围中的同名名字将被该局部名字屏蔽,在声明时进行检查,如果在using声明作用域内,与using声明有相同的局部名字,将遇到声明冲突的编译时错误;
//named_namespace.cpp 命名空间成员定义实现文件
#include "named_namespace.h"
#include <iostream>
namespace name_17_2_3
{
int i = -1; //命名空间n