namespace 命名空间

命名空间是为了解决标识符重名问题而引入的,如std命名空间包含了cin和cout等。可以通过::限定命名空间或者using关键字导入,using能导入整个命名空间或单个成员,但可能引发冲突。命名空间可嵌套定义,并能在不同文件中分段定义然后合并。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

namespace 命名空间

命名空间是什么?由来?

命名空间是一种域,叫命名空间域。是为了防止我们在项目中定义标识符时重名而产生冲突才出现的。可以将变量,函数,类等放在命名空间中。std就是c++标准库中定义的命名空间,cin, cout, 等就在其中,要使用它们就要指定std这个命名空间。

:: 域作用限定符

使用:

std::cout域名::标识符

域作用限定符使用时放在标识符前,域之后,表示要使用那个域中的东西。

域作用限定符前也可以留空白,表示使用全局域(如全局变量)如:

int a = 6; //全局变量

int main()
{
	int a = 1;
	
	std::cout << a << '\n';    //不作限定优先使用局部域
	
	std::cout << ::a << '\n';  //使用全局域
	
	return 0;
}

输出结果为:

1   //局部变量的 a
6   //全局变量的 a

命名空间的使用

1. 使用::限定命名空间

每次要用到某个命名空间中定义的内容时在表示符前加上命名空间和域作用限定符,比如使用 cout:

std::cout

2. 使用 using 关键字

using 可以在全局域中使用,导入整个命名空间:

using namespace std;

注意这样操作是直接把整个命名空间展开到全局域,可能会与其他同名标识符产生冲突,不推荐使用

using 还可以只导入命名空间中的某个成员:

using std::cout;   //此时 std 前不可加 namespace 关键字

这种用法非常方便,不用每次使用 cout 都加上域作用限定符了。

命名空间的定义

使用关键字namespace后跟命名空间名称和代码声明,比如定义一个叫 sp 的命名空间:

namespace sp{
	int a; //代码声明
}          //最后不用加分号
命名空间可以嵌套定义
namespace sp{
	int a;
    
    namespace sp_2{  //在命名空间sp内再定义一个命名空间sp_2
        int a;
    }
}          

可以这样访问 sp_2 中的 a : sp::sp_2::a

命名空间可以定义在几个不同的部分中

简单地理解就是如果定义了两个或以上同名的命名空间,那这些命名空间实际上会合并成一个,所以在这些命名空间中自然不能出现相同的标识符。命名空间的各个部分也能定义在不同的文件中。

即:

namespace sp
{
    int a = 1;
}

namespace sp
{
    int b = 2;
}

等价于:

namespace sp
{
    int a = 1;
    int b = 2;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BowTen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值