C++ 命名空间 详解

在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。

  • 命名空间吧与作用域

命名空间其实也是一种作用域,在C语言中我们接触了全局作用域和局部作用域。

  • 命名空间的定义

相当于文件夹的意思,为了能够更好的找到和识别文件。

  1. namespace,即名字空间,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

  2. 不定义名字空间的情况下,都属于全局名字空间,同一个名字空间可以定义多次,名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关字namespace,使用名字空间时用符号指定。

  3. 不指定名字空间的变量或函数都是当前名字空间下的变量或函数。

  4. 用别名指定名字空间名字空间可以一层层嵌套,指定时也得一层层地指定,这样很不方便,一般用别名代替就方便多了。

  5. 没有名字的名字空间名字空间的名字也可以省略,称之为无名名字空间,无名名字空间经常被使用,其作用是“内部可以引用,而外部不能引用。

1.普通命名空间

namespace N1
{ 
     int  a;
     int  Add(int left, int right)
     {
            return left + right;
     }
}

2.命名空间可以嵌套

namespace N1
{
     int  a;
     int  Add(int left, int right)
     {
            return left + right;
     }
    namespace N2
    {
         int  a;
         int  Add(int left, int right)
         {
            return left + right;
         }
    }
}

3.同一个工程中允许多个相同名称的命名空间

namespace N1
{ 
     int  a;
     int  Add(int left, int right)
     {
            return left + right;
     }
}
namespace N1
{ 
     int  a;
     int  Add(int left, int right)
     {
            return left + right;
     }
}
  • 命名空间的使用

1.加命名空间名称及作用域限定符

#include
namespace N1
{ 
     int  a = 20;
     int  Add(int left, int right)
     {
            return left + right;
     }
}
int a = 10;
int main()
{
    printf("%d\n",a);    //想打印出10
    printf("%d\n",N1::a);//想打印出20
    return 0;
}

2.使用关键字using将命名空间中成员引入

#include
namespace N1
{ 
     int  a = 20;
     int  Add(int left, int right)
     {
            return left + right;
     }
}
using N1::a;
int main()
{
    printf("%d\n",a);    //想打印出20
    printf("%d\n",N1::a);//想打印出20
    return 0;
}

3.使用using namespace 命名空间名称引入

#include
namespace N1
{ 
     int  a = 20;
     int  Add(int left, int right)
     {
            return left + right;
     }
}
using namespace N1;
int main()
{
    printf("%d\n",a);    //想打印出20
    printf("%d\n",N1::a);//想打印出20
    Add(1, 2);
    return 0;
}

 

你可能感兴趣的:(c++,命名空间)