1.命名冲突问题
我们先按c语言的写法来写串代码
代码
#include<stdio.h>
int rand = 0;
int main()
{
printf("%d\n", rand);
return 0;
}
运行一下
没有出现问题,可以看出c++是支持C语言的语法的
但是c语言有个很致命的问题命名冲突问题,我们在代码里面加入#include<stdlib.h>
代码
#include<stdio.h>
#include<stdlib.h>
int rand = 0;
int main()
{
printf("%d\n", rand);
return 0;
}
运行结果
运行了一下结果就发现报错了,这就是C语言致命的问题名字冲突
就是头文件展开,#include<stdlib.h>展开里面有个rand的函数它们就名字冲突了。
打个比喻,我写了个代码和我的同事的名字冲突了,C语言怎么解决呢?只能改名字了,这样子只能是治标不治本,所以说c语言是没有很好的解决这个问题的
但是c++引入了命名空间来解决命名冲突的问题(命名空间就是namespace这个关键字)
代码
#include<stdio.h>
#include<stdlib.h>
namespace li//namespace后面跟什么都可以,这是自己命名的
{
int rand = 0;
}
int main()
{
printf("%d\n", rand);
return 0;
}
运行结果
这样子就没有问题了,这里打印出来的一堆数字是函数的地址
那么这个函数是怎么解决这个问题的
相当于把rand关在里面,让它们隔离。
如果按这样写行不行?
代码
namespace li//namespace后面跟什么都可以,这是自己命名的
{
int rand = 0;
}
int f = 0;
void f()
{
}
int main()
{
printf("%d\n", rand);
return 0;
}
运行结果
答案是不行的,因为它们在同一个作用域里面,但是把其中一个函数放入命名空间里面就可以
代码
#include<stdio.h>
#include<stdlib.h>
namespace li//namespace后面跟什么都可以,这是自己命名的
{
int f = 0;
int rand = 0;
}
void f()
{
}
int main()
{
printf("%d\n", rand);
return 0;
}
运行结果