0%

通过namespace防止命名冲突

不止一位学长讲述过一些选手因为"next""pipe"而暴毙的英雄事迹。。。

那么Linux下如何防止命名冲突?

或者仅仅是因为懒得想变量名

听过学长的指导后,本文全程口糊,有不恰当处还请指出

C++中有了命名空间这个东西,不同命名空间的元素可以同名

你平时写的using namespace std;就是代替了每次调用时的std::,相当于把std作为此程序的命名空间

我们可以创建自己的命名空间

1
2
3
namespace NAME {// NAME可以是你自己取的名字
// code...
}

里面的程序正常写就行

不过C++的运行端口是::main,所以main函数写在namespace里会找不到端口,无法运行

只把main写在外面?这辈子都不会的

为了程序的优美性,可以namespace里写一个main,外面调用即可

1
2
3
4
5
6
7
8
9
namespace BANANA {
inline void main() {// inline是一点优化,自己百度。因为没必要必须返回0,可以是void
// code
}
}
int main() {
BANANA::main();// 和std同理,通过BANANA::调用就没有冲突
return 0;
}

这样的话写一大堆函数和全局变量的时候,main函数依然优美

总之自己看着舒服就行

另外,namespace是可以嵌套的,并且优先级是本层namespace > 外层namespace

调用时本层找不到就会从上一层找

于是我们照样写using namespace std,不受影响,太棒了不用写烦人的std

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
namespace BANANA {
int a = 1;
namespace OI {
int a = 5;
inline void sell() {
cout <<"兜售小main包烤绿鸟" << endl;// cout照样用
}
}
inline void main() {
cout << a << endl;// 这里的a = 1
OI::sell();// 调用其他namespace的元素同理
}
}
int main() {
BANANA::main();
return 0;
}

好了你还怕什么?

不过学长实测,如果你起linux,unix的变量名,还是会翻车,他们太硬了

不过你可以随心所欲地打万能头了。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <bits/stdc++.h>
using namespace std;
namespace BANANA {
int x1, x2, y1, y2;
long long pipe, next[105];
inline void main() {
cout << "小main包烤绿鸟还有人要么!!!" << endl;
}
}
int main() {
BANANA::main();
return 0;
}

祝大家敲代码愉快~