今天我们来介绍一下C++是如何解决在C语言中的命名冲突的问题
我们在写C++的时候经常见到这样一段语句:
using namespace std;
这个namespace是什么意思呢?
现在我们来介绍一下namespace是什么意思:
这个namespace其实是命名空间的意思,在C++标准库中有很多东西都是放在命名空间中的,比如我们的cout和endl语句就在std这一个命名空间中。我们知道,C++的搜索规则是局部优先搜索,局部搜索不到再去全局搜索,如果全局搜索不到编译器就会报错。请看以下示例:
我们发现cout和endl在我们没有写using namespace std;这一段语句的时候编译器进行了报错处理。所以这就告诉我们cout和endl它们不在C++的全局域中,它们其实是在一个名为std这个命名空间里面,如果我们不告诉编译器cout和endl在std命名空间中,那么编译器就会找不到这两个标识符而报错。所以我们在写代码的时候会加上using namespace std;这一段语句来告诉编译器我们还有这一个命名空间,如果有一些标识符找不到我们还可以去这个命名空间中找。
以下是加了这一段语句的示例及运行结果:
以上我们稍微介绍了以下C++的命名空间,接下来我们来介绍一下C++中命名空间的定义。
命名空间的定义
命名空间的定义需要用到namespace这个关键字。请看以下代码:
namespace zs
{
int a, b;
int add(int x, int y)
{
return x + y;
}
}
在这里我们定义了一个叫做张三的命名空间,并且在这个命名空间里面还定义了一个叫做add的函数。
这就是一个简单的命名空间的定义。当然,命名空间也支持嵌套使用请看以下代码示例:
在这里我们在home这个命名空间里面定义了三个命名空间,这三个命名空间中有着相同的成员变量和成员函数,但是编译器并没有报错,这就是C++中使用命名空间解决C语言中命名冲突的原因。
以上就是C++中命名空间的定义,接下来我们来介绍命名空间应该如何使用。
命名空间的使用
命名空间的使用有三种形式。
加命名空间名称及作用域限定符
这里的作用域限定符其实就是这个符号“::”,具体请看以下代码示例:
这就是第一种使用命名空间的形式。
使用using将命名空间中某个成员引入
这里的使用using将命名空间中某个成员引入和我们经常写的using namespacce std;非常相似。具体请看以下代码示例:
以上就是我们的第二种使用命名空间的介绍,接下来是第三种命名空间的使用方式。
使用using namespace 命名空间名称 引入
这里的第三种使用命名空间的情况和我们之前经常写的using namespace std;的形式一模一样。请看以下代码示例:
以上就是命名空间的使用方式的介绍。
命名空间可以很好的解决C语言种命名冲突的问题,在C语言中,如果两个程序员使用了同一个变量名,那么就必须要有一个程序员去更改自己的变量名,但是命名空间的加入成功的让我们的不同的程序员使用同一个变量名,完美的解决了程序员之间的命名冲突的问题。