命名空间 namespace 与 using
namespace
定义
解决变量命名冲突问题
不能在代码块中定义
可以在全局或命名空间中定义
同名命名空间会进行合并
未命名的命名空间
相当于该文件的全局变量
using 声明和编译
定义
直接使用命名空间中定义的方法等,而不用使用前缀
声明命名空间
namespace jblock {
int age;
int num;
}
使用1 命名空间::成员 | 使用2 using声明 | 使用3 using编译 |
---|---|---|
jblock::age = 1; | using jblock::age; age // 可以不用前缀 jblock::num; // 需要前缀 | using namespace jblock; age // 都不用前缀 num |
声明嵌套命名空间
namespace space {
namespace s1 { // 嵌套声明
int age
}
}
//使用
space::s1::age;
命名空间中使用using
namespace space {
using std::cout;
using namespace space1;
}
// 使用
space::cout;
using namespace space;时 也包含了 using namespace space1;
匿名命名空间
namespace {
int age
}
// 使用 age; 相当于该文件的全局变量
using编译 (using namespace std这种格式) 注意事项
//如果跟全局变量重名 的几种情况
// 情况1
namespace test {int age}; // 命名空间中age
using namepace test; // 期望可直接使用age 不用test::age格式
int age; // 又声明了全局变量age
{
int age // 又声明了局部变量age
age // ===> 局部变量
::age // ===> 全局变量
test::age // 命名空间中变量
}
// 情况2
using namepace test; //同上
int age; // 同上
{
::age // ===> 全局变量
age == test::age // 不同于情况1的点
}
using声明
using std::cout; 只取std命名空间中 cout 方法
使特定的成员可用