【c++学习笔记】命名空间

命名空间

1.基本概念:

  • 在c++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会导致很多冲突,使用命名空间的目的是对标识符的名称进程本地化,以避免命名冲突或名字污染,namespace关键字就是为了解决这种问题。
  • 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
  • 没有名称的命名空间,他的成员只能在声明该命名空间的文件中可以访问,对于其他文件该命名空间中的内容不可见。

2.命名空间的使用

  • 方式一:
#include <iostream>
using namespace std;

int a = 1000;//全局变量

namespace N1
{
    int a = 10;
}

namespace N2
{
    int a = 1;
}

int main()
{
    int a = 100;

    cout << a << endl;//不加命名空间名的话,按照就近原则
    cout << N1::a << endl;//访问N1命名空间中的a
    cout << N2::a << endl;
    cout << ::a << endl;//访问全局命名空间中的a

    return 0;
}
  • 方式二:
namespace N1
{
    int a = 10;
    int b = 20;

    int add(int a, int b)
    {
        return a + b;
    }
}

using N1::a;//将命名空间N1中的a全局化

namespace N2
{
    void print()
    {
        cout << a << endl;
    }
}

int main()
{
    cout << a << endl;
    N2::print();
}

这里写图片描述

  • 方式三:
namespace N1
{
    int a = 10;
    int b = 20;

    int add(int a, int b)
    {
        return a + b;
    }
}

using namespace N1;//将命名空间N1中的所有成员全局化

namespace N2
{
    void print()
    {
        cout << a << endl;
    }
}

int main()
{
    cout << a << endl;
    cout << "a + b = " << add(a, b) <<endl;
}

这里写图片描述

注 :

  • 命名空间中的内容既可以定义变量,也可以定义函数
  • 命名空间可以嵌套
  • 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间

猜你喜欢

转载自blog.csdn.net/virgofarm/article/details/80667880