【C++初阶】命名空间 namespace


一.前言

在正式进入C++前,我们需要先了解了解C++。顾名思义,C++是基于C的一种编程语言,相较于C,C++写出来的代码更简洁,有时候C需要几百行代码,而C只需要几十行就可以解决,C++也很好的解决了C中存在的一些问题,例如:命名冲突。

C++的命名空间就能很好的解决这个问题。


二.命名冲突

在C语言中,我们定义的变量不能是库里有的,例如 int  printf  就不能这么定义,因为printf是库的函数,这样定义变量就会命名冲突

上图就很好的展示了这个错误。那库那么多,我们怎么保证当我们新加了一个头文件时,不会形成命名冲突呢?万一这个命名冲突又很多该怎么办?要全部改掉吗?

完全不需要,C++的命名空间可以完美解决这个问题。

三.命名空间  namespace

A.命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

例:

namespace  Eve   //命名空间的名字
{
    //命名空间的成员
    int a=10;
    int b=20;
    char d='a';
}     //注意这里没有分号

命名空间的成员可以是变量,函数,类型等;

命名空间可以嵌套定义

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中;
ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个。

B.命名空间的使用

1.使用命名空间的目的

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染

2.域

域分为:

1.类域

2.命名空间域

3.全局域

4.局部域

它们的访问顺序一般是:局部域->全局域->展开的命名空间域  or  指定访问的命名空间域

3.命名空间的三种使用方式

a.加命名空间名称及作用域限定符  (::)

作用域限定符:“::”(即两个冒号);

使用格式:命名空间的名字::成员名

注:若::前是空白,则访问的是全局的成员

例:

namespace Eve
{
    int a=10;
    char b='a';
}

int main()
{
    printf("%d  %c\n",Eve::a,Eve::b);   //访问命名空间内的成员
    
    return 0;
}

b.使用using将命名空间中某个成员引入

using可以理解为展开,展开后的命名空间或是命名空间中的成员将暴露在全局域下

例:

namespace Eve
{
    int a=10;
    int b=20;
}

using  Eve::a;  //展开命名空间中的成员a,注意后面有分号

int main()
{
    printf("%d\n",a);  //因为a已经展开了,所以可以直接使用

    return 0;
}

c.使用using namespace 命名空间名称 引入

例:

namespace Eve
{
    int a=10;
    int b=20;
}

using  namespace Eve;  //展开整个命名空间,注意后面有分号

int main()
{
    printf("%d\n",a);  //因为a已经展开了,所以可以直接使用

    return 0;
}

访问嵌套的命名空间的成员时:

C.例子总结

int a = 0;

namespace Eve
{
	int a = 1;
	
}

//using namespace Eve;

int main()
{
	int a = 2;

	printf("%d\n", a);
	printf("%d\n", ::a);
	printf("%d\n", Eve::a);

	return 0;
}

打印结果是什么呢?

如图所示:第一个printf 访问的是局部变量

                  第二个printf 访问的是全局变量

                  第三个printf 访问的是命名空间Eve里的a


三.一些小技巧

using  namespace  std;

上面这句代码是展开标准库(展开前要包含头文件<iostream>),但不能随意展开,有一定的风险,平常练习可以用用,做项目时建议不要展开。

还有一些我们常用的可以展开,比如cout,cin,endl等,这样更便捷。


🐬🤖本篇文章到此就结束了,这是博主的第一篇关于C++的文章,以后也会不断更新的,             若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼

  • 48
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 37
    评论
在C++中,命名空间是一种将全局作用域划分为不同部分的机制,用于避免命名冲突和组织代码。在iOS开发中,常见的命名空间有以下几种: 1. 全局命名空间:C++中所有未显式放置于其他命名空间的代码都位于全局命名空间中。在iOS开发中,全局命名空间主要用于定义全局常量、枚举类型和函数等。 2. 标准库命名空间:C++标准库中的类、函数和类型定义通常位于std命名空间中。在iOS开发中,如果你使用了C++标准库的功能,你需要在代码中使用std::前缀来访问这些定义。 3. 自定义命名空间:为了更好地组织代码并避免命名冲突,你可以创建自己的命名空间。例如,在iOS开发中你可以创建一个自定义的命名空间来包含你的应用程序的所有类和函数。 下面是一个简单的示例,展示了如何使用自定义命名空间来组织代码: ```cpp // 在头文件中定义命名空间 namespace MyApp { // 在命名空间中定义类 class MyClass { public: void doSomething(); }; } // 在源文件中实现命名空间中的函数 namespace MyApp { void MyClass::doSomething() { // 实现代码 } } // 在其他文件中使用命名空间中的类和函数 int main() { MyApp::MyClass obj; obj.doSomething(); return 0; } ``` 在上面的示例中,我们创建了一个名为MyApp的命名空间,并在其中定义了一个名为MyClass的类和一个名为doSomething的成员函数。在其他文件中,我们可以使用`MyApp::`前缀来访问这些定义。 需要注意的是,在Objective-C和Swift中,通常会使用模块化的方式来组织代码,而不是直接使用C++的命名空间。因此,在iOS开发中,你可能会更多地使用Objective-C的命名规范和Swift的模块化机制来组织代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值