2.5 重名问题
上一节通过讲解iostream与iostream.h的区别引出了标准命名空间std,又从标准命名空间了解到所有的标准库函数都在标准命名空间std中定义,而C++之所以引入命名空间这个概念,是为了避免重名问题,比如说避免重复的函数名或者变量名所引起的冲突。
程序演示:
#include<iostream>
namespace a
{
int b=5;
}
namespace c
{
int b=8;
}
int main()
{
using namespace a;
using namespace c;
int b=9;
std::cout<<b<<std::endl;
//std::cout<<b<<" "<<a::b<<" "<<c::b<<std::endl;
return 0;
}
using namespace a;
using namespace c;
int b=9;
这样我们就有了三个名字为b的变量名,但是它们的值都是不一样的。
假如我们不采用命名空间的话,显然我们是不能这么定义的:
int b = 5;
int b = 8;
int b = 9;
但是假如程序很大,而且不是一个人所写的时候,这样的情况会出现很多,C++的解决方法是采用命名空间,本节的程序采用了命名空间后,三个同名的变量b由于处于不同的命名空间中,因此它们不会产生冲突。
//int b=9;
std::cout<<b<<std::endl;
b这个符号引起了歧义。
编译器不知该输出哪个b。
因此终止编译并显示一条错误信息。
关于命名空间的具体作用在第二十二章“命名空间”将会有更详细的介绍,这里只需了解即可。