命名空间(namespace)

本文详细介绍了C++中的命名空间,包括其作用、格式、使用方法、别名以及嵌套,强调了命名空间在避免名称冲突、提升代码可读性和维护性方面的关键作用。
摘要由CSDN通过智能技术生成

定义

在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;来使用标准库中的元素。

两个命名空间包含同样的函数(函数体形参也是一样)

当两个命名空间包含同样的函数(函数体形参也是一样)的时候。

1:别的地方引用的时候,如果不包含对应的命名空间,编译会报错函数未定义。

2:如果别的源文件包含了两个命名空间的头文件,并且写using namespace XXX; 声明引用了两个命名空间,程序也会报错,call of overloaded ‘function(args...)’ is ambiguous,编译器不知道使用哪一个,所以在调用对应的函数前面要加上对应的命名空间名称 XXX::API();

总结

命名空间是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 名字{}可以在多处使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值