## ::
可以指定作用域
如下如果不加::会打印局部变量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();
}