当前位置: 首页 > news >正文

命名空间(namespace)

定义

在C++中,命名空间(Namespace)是一个特性,用于封装代码并避免名称冲突。命名空间可以看作是一个容器,其中可以包含类、函数、变量、常量、其他命名空间等。通过使用命名空间,我们可以更好地组织代码,提高代码的可读性和可维护性。

命名空间的格式

命名空间通过关键字namespace进行定义。例如:

namespace MyNamespace {  
    int x = 0;  
    void foo() {  
        // ...  
    }  
}

其中, namespace_name 是命名空间的名称,使用大括号 {} 将其中的元素定义放置在该命名空间内。 其中的声明可以是任何声明语句,如变量、函数或其他命名空间等。在这个例子中,MyNamespace是一个命名空间,它包含了一个整数变量x和一个函数foo

使用命名空间

要在代码中使用命名空间中的元素,我们需要指定命名空间名称。例如:

MyNamespace::x = 10;  
MyNamespace::foo();

命名空间别名

为了简化代码,我们可以使用using关键字为命名空间创建别名。例如:

using namespace MyNamespace;  
  
x = 20;  
foo();

命名空间的嵌套

命名空间可以嵌套,即一个命名空间可以包含另一个命名空间。例如:

namespace Outer {  
    int y = 100;  
  
    namespace Inner {  
        void bar() {  
            // ...  
        }  
    }  
}

在这个例子中,Outer是一个命名空间,它包含一个整数变量y和一个嵌套的命名空间InnerInner命名空间包含了一个函数bar

标准命名空间

在C++标准库中,所有的函数、对象和类型都被定义在一个名为std的命名空间中。因此,当使用C++标准库时,我们通常需要使用std::前缀,或者通过using namespace std;来使用标准库中的元素。

总结

命名空间是C++中一个非常有用的特性,它可以帮助我们更好地组织代码,避免名称冲突,并提高代码的可读性和可维护性。通过合理地使用命名空间,我们可以使代码更加清晰、易于理解和维护。

示例

namespace.cpp

#include "namespace.h"
namespace mystd
{
    int myadd(const int a,const int b)
    {
        return a+b;
    }
}


namespace mystd
{
    int myAdd2(const int a,const int b)
    {
        return a+b*2;
    }
}

namespace.h

#ifndef ___NAMESPACE__H
#define ___NAMESPACE__H
namespace mystd
{
int myadd(const int a,const int b);
int myAdd2(const int a,const int b);
}
#endif

main.cpp

#include<iostream>
#include"namespace.h"
using namespace mystd;
int main()
{
    int sum=mystd::myadd(10,20);
    std::cout<<sum<<std::endl;

    sum=mystd::myAdd2(10,20);
    std::cout<<sum<<std::endl;
    return 0;
}

编译运行:

1:声明和定义都要加上自己定义的namespace 名字{}

 2:同一个namespace 名字{}可以在多处使用

相关文章:

  • nginx使用详解--动静分离
  • 每天学习2小时——黑客(网络安全)技术
  • [LeetBook]【学习日记】寻找链表相交节点
  • day57 集合 List Set Map
  • 服务器git安装python包失败,如何手动下载github项目包并安装到虚拟环境中(简单易懂)
  • 【JavaScript 漫游】【029】GlobalEventHandlers 接口总结
  • 在Spring Boot中如何实现异常处理?
  • 云计算 2月28号 (linux的磁盘分区)
  • LeetCode-第14题-最长公共前缀
  • nextjs13如何进行服务端渲染?
  • wordpress 开源主题
  • k8s学习-数据管理之nfs手动搭建
  • 基于JavaWEB SpringBoot婚纱影楼摄影预约网站设计和实现
  • Timeplus-proton流处理器调研
  • 自动驾驶加速落地,激光雷达放量可期(上)
  • 突破编程_C++_STL教程( list 的实战应用)
  • C语言基础(五)——结构体与C++引用
  • C/C++嵌入式开发环境搭建,Qt交叉编译,cmake交叉编译,clion/vscode远程开发
  • Qt 简约美观的加载动画 小沙漏风格 第六季
  • C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)
  • 福耀科技大学发布招生章程:专业培养语种为英语,综合改革省份选考需含物化
  • 瑞士外长答澎湃:瑞中都愿升级自贸协定,关税战没有任何好处
  • 中国铝业首季“开门红”:净利润超35亿元,同比增加近六成
  • 商务部新闻发言人:截至目前,中美之间未进行任何经贸谈判
  • “雷公”起诉人贩子王浩文案开庭:庭审前手写道歉信,庭审中不承认拐走川川
  • 韩国检方起诉前总统文在寅