cpp_namespace - ShenYj/ShenYj.github.io GitHub Wiki
命名空间可以用来避免命名冲突
命名空间不影响内存布局
namespace N {
/// 命名空间中定义的变量仍旧是全局变量, 只是访问时需要指明命名空间
int g_age;
class Person {}
}
namespace M {
class Person {}
}
int main() {
N::Person p1;
M::Person p2;
return 0;
}
-
命名空间中定义的变量仍旧是全局变量, 只是访问时需要指明命名空间
-
方式一
namespace N { /// 命名空间中定义的变量仍旧是全局变量, 只是访问时需要指明命名空间 int g_age; class Person {} } int main() { N::g_age = 10; }
-
方式二
namespace N { /// 命名空间中定义的变量仍旧是全局变量, 只是访问时需要指明命名空间 int g_age; class Person {} } int main() { /// 整个 main 函数中都可以使用 命名空间 N 中的内容 using namespace N; g_age = 10; }
using 除了引入命名空间作用外,还有指定别名、在子类中引用基类的成员的作用
-
-
嵌套访问
namespace N { namespace M { int g_age; } } int main() { /// 访问命名空间下的全局变量 N::M::g_age = 10; return 0; }
-
有个默认的全局命名空间,我们创建的命名空间默认都嵌套在它里面
/// 默认全局函数
void func() {}
namespace N {
/// N 命名空间内的全局函数
void func() {}
}
int main() {
using namespace N;
/// 在 main 函数内引入了 N 命名空间, 这样同名函数 func 在调用时就会存在歧义
//func(); 错误
/// 正确方式
/// 调用 N 命名空间下的func函数
N::func();
/// 调用外面的func函数, 全局命名空间,没有名字
::func();
return 0;
}
-
写法一
namespace N { int g_age; } namespace N { int g_no; }
-
写法二
namespace N { int g_age; int g_no; }
两种写法一致