C++:命名空间

    从今天正式开始对C++的学习,这里只学习C++对C的拓展,和C相同的部分在C语言专栏中都可以找到,我们先看一段C++代码

#include<iostream>
using namespace std;
int main()
{
   cout<<"hello world<<endl;
   return 0;
}

     同样也是打印hello world,头文件还有main函数之前的using namespace std什么意思,cout又是什么意思,都需要我们进行了解

1.命名空间基础

     当一个项目很大时,它可能会包含大量重复的名字,C++可以对名字的产生和其所在作用域进行控制,在之前C语言的学习我们可以通过static关键字来使得名字只能在本编译单元内可见,在C++中我们可以通过命名空间来控制对名字的访问

     在C++中,名称可以是符号常量、变量、宏、函数、结构体、枚举等等

     std是C++标准命名空间,C++标准程序库中的所有标识符都被定义在std命名空间中,比如类iostream、vector等,使用时要加上using声明(using namespace std)或using指示(如std::cout)。

     可以定义不同的命名空间,这样即使名字相同也不会出现错误,类似这样:

      那我们如何定义命名空间呢,下面就是了

 2.命名空间的使用

2.1 命名空间的定义

namespace 名称
{

//定义变量、函数、类型等等

}

2.2 命名空间成员的访问

   (1)使用作用域操作符 ::

   (2)空间名::成员

#include<iostream>
using namespace std;

namespace nameA  //定义一个名字是nameA的空间
{
    int a;
    void func()
    {
      cout<<"nameA"<<endl;
    }
}

namespace nameB   //定义一个名字是nameB的空间
{
     int a;
     void func()
     {
      cout<<"nameB"<<endl;
     }
}

int main()
{
    //访问空间中的成员变量
    nameA::a=100;
    nameB::a=200;
    cout<<"A::a:"<<nameA::a<<endl;//cout就类似printf,用来输出内容,endl的作用就相当于\n
    cout<<"B::a:"<<nameB::a<<endl;
    
    //访问空间中的成员函数
    nameA::func();
    nameB::func();
    return 0;
}

        由此可见,在不同的命名空间中定义相同名字的变量或者函数都是没有问题的,两个空间相互独立,谁也不会影响谁,这就是C++的优势! 

2.3 命名空间的错误使用

      命名空间不能在某个函数内定义,比如这样:

void test()
{
    namespace A
   {
      int a=10;
   }
    namespace B
   {
      int a=10;
   }
   cout<<A::a<<endl;
   cout<<B::a<<endl;
}

     命名空间只能在全局范围内定义,否则你函数调用结束了,空间也没了,等于没定义,费这么大劲干嘛,只能在全局范围内定义!

2.4 命名空间的嵌套使用

namespace A
{

   int a=10;
   namespace B
   {
       int a=10;
   }
}
void test()
{
   cout<<A::a<<endl;
   cout<<A::B::a<<endl;
}

2.5 命名空间的别名

     如果命名空间的名字很长记不住怎么办,我们有办法,起个别名,代码如下:

namespace veryLongname
{
   int a=10;
   void func()
   {
     cout<<"hello world"<<endl;
   }

void test()
{
   namespace shortname=veryLongname;//起别名
   cout<<"veryLongname::a:"<<shortname::a<<endl;
   veryLongname::func();
   shortname::func();
}

     可以看到,两个名字的效果是一样的,神奇不神奇?

相关推荐

  1. c++ 命名空间 匿名命名空间

    2023-12-16 12:14:03       39 阅读
  2. C++(1) 命名空间

    2023-12-16 12:14:03       34 阅读
  3. C++命名空间详解

    2023-12-16 12:14:03       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-16 12:14:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-16 12:14:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-16 12:14:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-16 12:14:03       20 阅读

热门阅读

  1. 前端面试题:什么是对称加密和非对称加密?

    2023-12-16 12:14:03       40 阅读
  2. 低频量化日报

    2023-12-16 12:14:03       34 阅读
  3. P6492 [COCI2010-2011#6] STEP 题解

    2023-12-16 12:14:03       27 阅读
  4. docker 清除不用的容器数据

    2023-12-16 12:14:03       32 阅读
  5. 电子显示器件:现代信息显示技术的核心

    2023-12-16 12:14:03       42 阅读
  6. VueRouter的编程式导航和导航守卫

    2023-12-16 12:14:03       38 阅读
  7. docker整体环境转移

    2023-12-16 12:14:03       47 阅读
  8. Spring 的 @Configuration 和 @Component 注解区别

    2023-12-16 12:14:03       50 阅读
  9. 开源数据集下载地址

    2023-12-16 12:14:03       39 阅读
  10. 【Python基础】线程

    2023-12-16 12:14:03       31 阅读
  11. c语言之打印素数

    2023-12-16 12:14:03       38 阅读
  12. 服务器种类有哪些?

    2023-12-16 12:14:03       43 阅读