目录
命名空间(namespace)只能定义在全局范围
命名空间下可以存放变量,结构体,函数,类
一 基本使用
创建格式:
namespace (空间名){
变量,结构体,函数,类等等
}
调用方式:
(空间名)::(变量,结构体,函数,类等等)
例:
# include<iostream>
using namespace std;
int a = 00, b = 01;
namespace A //命名空间(namespace)只能定义在全局范围
{
int a = 10, b = 11; //命名空间下可以存放变量,结构体,函数,类
}
namespace B {
int a = 20, b = 21;
}
void test1() {
int a = 30, b = 31;
printf("局部:\ta=%d\tb=%d\n",a,b );
printf("全局:\ta=%d\tb=%d\n",::a,::b);
printf("A:\ta=%d\tb=%d\n", A::a, A::b);
printf("B:\ta=%d\tb=%d\n", B::a, B::b);
}
int main() {
test1();
return 0;
}
::a默认调用的全局变量a
二 特点
1 命名空间可以重名
namespace B {
int a = 20, b = 21;
}
namespace B {
int c = 21; //命名空间可以重名,相当于合并操作
}
2 命名空间可以嵌套
嵌套格式:
namespace C { //命名空间嵌套
int d = 001;
namespace D {
int d = 002;
}
}
调用格式:
void test2() {
cout << C::d << endl;
cout << C::D::d << endl;
}
int main(){
test2();
return 0;
}
3 命名空间取别名
格式:
namespace (旧名字)=(新名字);
namespace C { //命名空间嵌套
int d = 001;
namespace D {
int d = 002;
}
}
namespace newc = C;
此时,newc就是C的另一个名字
4 作用域下函数的定义
(1)作用域下直接定义
定义:
namespace A //命名空间(namespace)只能定义在全局范围
{
int a = 10, b = 11; //命名空间下可以存放变量,结构体,函数,类
void fll(int age) { //作用域下直接定义函数
cout << age << endl;
cout << age << endl;
}
}
(2)间接定义
void A::foo(int age) { //A作用域下的函数
cout << age << endl;
}
namespace A
{
void foo(int age); //A 作用域下的声明;
}
调用:
void test2() {
A::fll(11);
A::foo(22);
}
int main() {
test2();
return 0;
}
结果:
5 命令空间不取名字时
namespace {
int a = 10;
void func() {
cout << "hello namespace" << endl;
}
}
不取名字时相当于这个命名空间内的所有成员都被编译器加上了static修饰