【C++入门笔记一】命名空间的理解和使用
一. 命名空间
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
原因总结:
- 防止与库中的函数命名发生冲突
- 在大型项目中,可能会与同事的命名发生冲突
二.命名空间的定义及成员的访问
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。 命名空间可以嵌套命名, 也可以如果在同一个项目中,命名空间的名称如果是相同的那就把两个命名空间进行合并,若合并之后出现两个相同名称的变量或函数(重载函数除外), 则会发生错误。
#include <iostream>
using namespace std ;
namespace name1
{
int a = 10 ;
double b ;
int Add(int a , int b ){
return a + b ;
}
}
namespace name2
{
int g = 20 ;
namespace name3
{
int h = 30 ;
int Mul(int a , int b )
{
return a * b ;
}
}
}
namespace name4
{
int q = 40 ;
int w = 50 ;
}
namespace name4
{
int e = 60 ;
int r = 70;
}
int main()
{
cout << "name1 a = " << name1::a ;
cout << "name1 Add(3,4) = " << name1::Add(3 , 4 ) << endl;
cout << "name2 b = " << name2::g ;
cout << "name2::name3::h = " << name2::name3::h << " " ;
cout << "name2 Mul(3,5) = " << name2::name3::Mul(3,5) << endl;
cout << "name4 q = " << name4::q ;
cout << "name4 q = " << name4::e << endl ;
}
执行结果截图
三. 如何访问命名空间的成员或者函数呢?
我们先来了解一下我们平时经常写的一句代码:
using namespace std ;
意思就是将C++标准库直接展开到全局 。 如果不将这句话写到代码中, 则我们无法直接使用标准库中的对象,如cout , cin , endl 等等,这些以后会慢慢介绍,我们不着急 。 但我们可以这样来使用cout , endl 。
std::cout << "hello world!" << std::endl;
故我们也可以把我们自己命名的命名空间也可展开全局如 :
using namespace name1 ;
cout << Add(3 ,5 ) << endl;
以上是访问命名空间的其中一种方法, 这种方法虽然对使用者使用方便, 但容易造成命名污染。 第二种: 我们可以将我们常用的命名空间里面的成员引入到全局中来,这样我们就可以直接使用变量b, 这样可以尽可能减少我们的命名污染,同时又使用方便:
using namespace name1::b ;
cout << b << endl ;
|