C语言中是不存在命名空间的概念的,因为整个C语言工程就是一个大型的命名空间。当工程规模小时,不会产生大问题;但是一旦工程的规模大,会用到大量的动态库,尤其是第三方开发的动态库时往往就会遇到命名冲突的问题。因为不同的厂家开发的动态库中全局变量的命名很可能重复,为了避免这个问题,C++中新增了命名空间这一概念,使得通过命名空间的限定从而使用相同名称的全局变量。
命名空间的用法:
方法一:using namespace xxx
方法二:xxx::函数名
通过C++的标准库iostream
来对上述两种使用方式进行举例说明。
#方法一:
#include "iostream"
using namespace std;
int main()
{
cout << "test namespace" << endl;
return 1;
}
#方法二:
#include "iostream"
int main()
{
std::cout << "test namespace" << std::endl;
return 1;
}
Note:需要注意
iostream
和iostream.h
的区别,前者是C++中最新的速度更快的标准库,而后者是最早期版本的标准库且其内部没有命名空间这一说法。目前都用前者。
代码举例
#include "stdafx.h"
#include "iostream"
namespace BigHouse
{
int price = 100000;
namespace State
{
struct housestate
{
int area=1000;
int tall=1000;
};
}
}
namespace SmallHouse
{
int price = 100;
namespace State
{
struct housestate
{
int area = 10;
int tall = 10;
};
}
}
int main()
{
BigHouse::State::housestate BigHouseState;
SmallHouse::State::housestate SmallHouseState;
std::cout << "BigHouse price:"<< BigHouse::price << std::endl;
std::cout << "BigHouse area:" << BigHouseState.area << std::endl;
std::cout << "BigHouse tall:" << BigHouseState.tall << std::endl;
std::cout << "SmallHouse price:" << SmallHouse::price << std::endl;
std::cout << "SmallHouse area:" << SmallHouseState.area << std::endl;
std::cout << "SmallHouse tall:" << SmallHouseState.tall << std::endl;
system("spase");
}
最终输出结果如下图所示: