C++ Namespace 命名空间

Namespace 命名空间

命名空间为了大型项目开发,而引入的一种避免命名冲突的一种机制。比如,在一
个大型项目中,要用到多家软件开发商提供的类库。在事先没有约定的情况下,两套类
库可能存在同名的函数或是全局变量而产生冲突。项目越大,用到的类库越多,开发人
员越多,这种冲突就会越明显。

:: 全局无名命名空间

C++在 C 语言的基础之上,C++首次以语法的行式,确立了全局无名命空间的的存在和使用方法。

#include <iostream>
using namespace std;
int var = 100;
void func(){
    cout<<" func "<<endl;
}
int main()
{
    int var = 200;
    cout<<"main var= "<<var<<endl;
    cout<<"global var = "<<::var<<endl;
    func();
    ::func();
    return 0;
}

Namespace 定义

语法 C++引入 namespace 的本质是对全局空间再次划分。确切的说,是对全局的
函数和变量再次进行作用域打包。

应用

#include <iostream>
using namespace std;

namespace NS1{
    int a=10;
}

namespace NS2 {
    int a=20;
}
int main() {
 一 :
    cout<<NS1::a<<endl; //10
    cout<<NS2::a<<endl; //20
    
 二: //命名空间成员,融入该语句所在的命令空间,可以会产生命冲突。
    using NS1::a;
    cout<<a<<endl; //10
    using NS2::a;  //error: 'a' conflicts with a previous declaration
  

 三: //将命名空间(即全体成员),融入该语句所在的命名空间。可能会产生命令空间。
    using namespace NS1;
    cout<<a<<endl; //10
    using namespace NS2;//err

 }
命名空间支持嵌套:

namespace NS1{
    int a=10;
    namespace NS2{
        int a=20;
    }
}

int main() {
    cout<<NS1::NS2::a<<endl; //20
    
    
    using NS1::a;
    using NS1::NS2::a;//error 还是会产生冲突
}

同名空间

同名命名空间可以合并,是协同开发的基础。

namespace NS1{
    int a=10;
}


namespace NS1{
    int b=20;
}

int main() {    
    cout<<NS1::a<<endl; //10
    cout<<NS1::b<<endl; //20
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++中自定义命名空间(namespace)的作用是为了避免命名冲突,类似于文件夹的概念,可以将相似的变量、函数、类等放在一个命名空间中进行管理。在一个命名空间中定义的名称只在该命名空间中有效,不会与其他命名空间中定义的名称发生冲突。 C++中自定义命名空间的使用方法有三种,分别是: 1.使用命名空间前缀,即在变量、函数、类等前加上命名空间的名称和作用域解析符(::),例如:`spaceA::aaa`。 2.使用using声明,即使用`using namespace 命名空间名`声明使用命名空间,例如:`using namespace spaceA`。 3.使用using编译指令,即在代码中使用`using 命名空间名::名称`的方式声明使用命名空间,例如:`using spaceA::aaa`。 下面是一个使用using声明的例子:[^1] ```c++ #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; namespace spaceA { // 自定义命名空间spaceA int aaa = 10; } using spaceA::aaa; // 声明命名空间spaceA中的变量aaa int main() { // 使用using声明的方式访问命名空间中定义的变量 cout << aaa << endl; // 输出:10 return 0; } ``` 下面是一个使用命名空间前缀的例子: ```c++ #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; namespace spaceA { // 自定义命名空间spaceA int aaa = 10; } int main() { // 使用命名空间前缀的方式访问命名空间中定义的变量 cout << spaceA::aaa << endl; // 输出:10 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarkTop1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值