重学C++系列之命名空间(namespace)

命名空间是C++中解决命名冲突的机制,它允许程序员将全局实体放入不同的命名空间中,确保唯一性。文章介绍了命名空间的基本概念,为何需要命名空间,以及如何使用命名空间,包括using关键字的几种用法,并提供了示例代码。推荐使用命名空间::成员的方式来访问,以避免潜在的命名冲突。
摘要由CSDN通过智能技术生成

前言

每次编写C++程序都几乎不可避免的写一句:

using namespace std;

却不知道是为什么?看看这篇,看完就懂了。

一、什么是命名空间

        命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。 通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。

二、为什么要有有命名空间

        在实际的系统开发中,所有的开发工作,通常都不会仅由一个人来开发完成,不同的人只负责自己功能模块,他们在设计时,比如声明变量,通常情况下,不会考虑其他人是否已使用该变量名,在模块功能测试时,相互之间是独立的,完全没有问题,当系统功能合成时,不可避免地会出现变量或函数的命名冲突,因为变量或函数重名而导致的问题将会造成一定的混乱。

        一句话:命名空间目的是给一个变量或者函数一个限制的作用域,从而解决命名冲突。

三、如何使用命名空间

        1、基本语法:

namespace 命名空间名字
{
    
}

        注意最后面不用加;

        2、使用方式(以命名空间为SpaceA为例)

        1)在导入using namespace SpaceA,就可以直接使用SpaceA中的变量和函数。

        2)在导入using SpaceA::a ,就只能单独使用a。

        3)在不导入命名空间的情况下,使用命名空间::成员(SpaceA::a)的方式来访问。

        4)在导入命名空间的情况下,使用命名空间::成员(SpaceA::a)的方式来访问。(推荐使用)

注意1)和2)的方式有局限性,当其他命名空间的成员名称相同时,会出现模糊,不建议使用。

        3、案例

#include <iostream>

using namespace std;


namespace SpaceA
{
    int a = 10;
}

using namespace SpaceA;

int main()
{
    // 在导入using namespace SpaceA后,可以直接用SpaceA中的变量
    cout << "SpaceA::a = " << a << endl;    

    return 0;
}

#include <iostream>

using namespace std;


namespace SpaceA
{
    int a = 10;
}

using SpaceA::a;

int main()
{
    // 在导入using SpaceA::a后,可以直接用a
    cout << "SpaceA::a = " << a << endl;    

    return 0;
}

#include <iostream>

using namespace std;


namespace SpaceA
{
    int a = 10;
}

// using SpaceA::a;

int main()
{
    // 不管是否导入命名空间,都可以直接用SpaceA::a
    cout << "SpaceA::a = " << SpaceA::a << endl;    

    return 0;
}

        4、可以不用再写using namespace std; 

        std是一个C++的标准命名空间,C语言中没有命名空间的说法,所以C语言只用导入头文件就可以了。下面演示不写using namespace std;来进行输入输出。其实,看到这里,应该都知道怎么写了,除非你没有认真看。

#include <iostream>


int main()
{
    int a;
    std::cin >> a;  // 使用命名空间::成员来访问
    std::cout << "a = " << a << std::endl;

    return 0;
}

四、总结

        命名空间是用来解决命名冲突的,推荐使用命名空间::成员的方式来访问成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值