双冒号
int val = 200;
void test_one()
{
int val = 400;
//双冒号为全局作用域的变量
cout << val << ::val << endl;
}
用途 解决名称冲突问题
必须在全局作用域下
xxx.h
#include <iostream>
using namespace std;
namespace name1 {
void goAtk();
}
xxx2.h
#include <iostream>
using namespace std;
namespace name2 {
void goAtk();
}
xxx1.h
#include "game.h"
void name1::goAtk() {
cout << "xxxxxx";
}
xxx2.h
#include "game.h"
void name2::goAtk() {
cout << "xxxxxx";
}
main.cpp
#include "xxxx.h"
#include "xxxx2.h"
void test01() {
name1::goAtk();
name2::goAtk();
}
//无名、匿名命名空间
namespace {
int m_C = 0; //等价于 static int m_C
int m_D = 0; //等价于 static int m_D
}
//命名空间可以起别名
namespace veryLongName {
int m_A = 0;
}
void test03() {
//起别名
namespace very = veryLongName;
cout << very::m_A << endl;
cout << veryLongName::m_A << endl;
}