## ::
可以指定作用域
如下如果不加::会打印局部变量a,就近原则
冒号前为空表示全局作用域
#include <iostream>
using namespace std;int a = 100;
void test() {int a = 10;cout << ::a << endl;
}
int main()
{test();
}
## namespace
1、可以存放变量、函数、类、结构体
2、命名空间可以重名和嵌套
3、必须定义在全局范围内
定义两个命名空间
使用前需加作用域
#include <iostream>
using namespace std;namespace a{int i=100;
}
namespace b{int i = 1000;
}int main()
{cout << a::i << endl;}
命名空间内函数声明及外部定义
#include <iostream>
using namespace std;namespace a{void test();
}
void a::test() {cout << "hello" << endl;
}int main()
{a::test();
}
无名命名空间
没有名字会在所有成员前添加static修饰
也就是所有成员都被声明为静态
#include <iostream>
using namespace std;namespace {void test() {cout << "hello" << endl;}
}int main()
{test();
}
命名空间取别名
给命名空间取一个别名
#include <iostream>
using namespace std;namespace a{void test() {cout << "hello" << endl;}
}
namespace newa = a;int main()
{newa::test();a::test();
}
using
指定使用命名空间
#include <iostream>
using namespace std;namespace a{void test() {cout << "hello" << endl;}
}
namespace b {void test() {cout << "hello xingnian" << endl;}
}namespace c{void test() {cout << "hello world" << endl;}
}int main()
{using namespace b;test();}
使用指定明明空间下的成员
#include <iostream>
using namespace std;namespace a{void test() {cout << "hello" << endl;}
}
namespace b {void test() {cout << "hello xingnian" << endl;}
}namespace c{void test() {cout << "hello world" << endl;}
}int main()
{using c::test;test();}