【C++】你了解命名空间吗?

这篇具有很好参考价值的文章主要介绍了【C++】你了解命名空间吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

                        C++语言之父:Bjarne Stroustrup博士(本贾尼)

【C++】你了解命名空间吗?

当我们在编写代码的时候,可能会产生一些命名冲突,为了解决这一冲突我们引出命名空间的概念

(ps:命名冲突的产生主要包括两个方面原因:1、与库函数名冲突;2、相互之间的冲突<比如在和朋友一起完成一个项目时,在互相不知晓的情况下,写了两个同名函数>

☑ 命名空间:定义一个新的作用域,对标识符的名称进行本地化, 以避免命名冲突或名字污染

那么这个时候就有人要问了,怎么又有一种新的作用域呀(C语言中就接触到了局部和全局作用域,suoyi作用域都有哪些呀)?

▲一般作用域分为:类域,局部域,全局域,命名空间域
(在很早之前,C++标准库是有头文件[.h]的,类似于VC6.0这种编译器上就支持。但是后来在加入了命名空间之后,以示区别就删掉了.h)
▲C++中访问的时候的默认顺序是:
局部域=》全局域=》展开了的命名空间域or指定访问命名空间域  (记住这个顺序!!!)

☑ 命名空间的定义:(命名空间中的变量也属于全局变量)

namespace + 名字
{
    ... ...
}
(注意最后面是没有分号的)
eg:
namespace A
{
	int x = 20;
}

用namspace + 名字来定义一个命名空间,命名空间内就是一个命名空间域,此作用域中的内容可通过展开了的命名空间域or指定访问命名空间域的方式来搜索访问。(跳转至下一个要点解释如何访问→)

1、命名空间不仅可以定义变量 还可以定义函数类型等 名字可随意但是注意最后不能给分号(与结构体不同)

namespace + 名字
{
    ... ...
}
(注意最后面是没有分号的)
eg:
namespace A
{
	int x = 20;
}

2、可嵌套 N1(N2) 二者同时定义a变量 访问N2中的a可以用 N1::N2::a来访问

namespace N1
{
	int a = 1;
	namespace N2
	{
		int a = 5;
		int b = 10;
		int c = 20;
	}
}
int main()
{
	printf("%d\n", N1::a);//访问N1中的a
	printf("%d\n", N1::N2::a);//访问N2中的a
	return 0;
}

3、一个项目中的相同名字的命名空间可以合并到同一个命名空间中

☑ 访问方式:

①展开了的命名空间域

展开整个命名空间域

using namespace A;

展开部分(eg:展开std命名空间中的cout函数)

using std::cout;

②指定访问命名空间域

namespace A
{
	int x = 20;
}
int main()
{
	int x = 10;
	printf("%d\n", A::x);
	return 0;
}

☑命名空间的使用(初步理解)  

【C++】你了解命名空间吗?

◎在定义了两个相同的变量(一个局部,一个全局),在访问的时候会优先访问局部变量。如果想要访问全局变量怎么办?如果仅仅只是在C语言领域中可以解决这个问题吗?
答案是不能,但是C++却可以实现(这也是C++对C语言完善的一个体现),我们只需要用到命名空间就可以解决这个问题。
【C++】你了解命名空间吗?

◎这里使用命名空间,相当于把x封装到了命名空间域中,可以通过特定方式来访问,也就解决了上述问题。

☑命名空间使用的相关注意事项

1、使用展开命名空间域的方式是有风险的,很有可能与全局变量产生冲突,因此一般使用指定访问or展开部分的方式来访问。

【C++】你了解命名空间吗?

 2、展开了的命名空间域&&包含头文件的区别

展开了的命名空间域是指 搜索(在编译阶段去命名空间中搜索);

包含头文件是指 展开(在预处理阶段将头文件中的内容展开)文章来源地址https://www.toymoban.com/news/detail-415785.html

(这块不太懂的可以去看看C语言中的预处理和编译相关内容)

到了这里,关于【C++】你了解命名空间吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++ 记忆站】命名空间

    在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染,namespace的出现就是针对这种问题的。 很多人在开

    2024年02月12日
    浏览(35)
  • 【C++】命名空间

    命名空间时怎么来的?它又是什么,让我们一起来看一下吧 首先了解:在同一个域中不能同时出现重名的变量或函数名等(不同域中可以尽管是全局与局部域) ok 我们来看 在工程项目里,一开始用 C语言 开发时,可能你在你的项目文件中给你的变量(或函数)取了一个好名

    2024年02月02日
    浏览(42)
  • C++的命名空间

    C++和C语言是有一些相似的地方的,而且C++就是C语言的改进版本,所以学习C++也得学习C语言,但是他们又是有很多不同的地方 下面我们就看一下C++的命名空间 我们首先看一下 如果是这一段代码,那么这里输出的是多少呢?   很好这里输出的是1,这里C语言里面也说过,如果

    2023年04月18日
    浏览(40)
  • 【C++】命名空间详解

    目录 前言 命名空间的定义  命名空间的使用 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存 在于全局作用域中,可能会导致很多冲突。 使用命名空间的目的是对标识符的名称进行本地化 , 以 避免命名冲突或名字污染 ,namespa

    2024年01月25日
    浏览(74)
  • 【C++】命名空间 ( namespace )

    命名空间是一种用来避免命名冲突的机制,它可以将一段代码的名称隔离开,使其与其他代码的名称不冲突; 命名空间的原理是将一个全局的作用域分成一个个命名空间,每个命名空间是个单独的作用域,同时若是在同一个作用域内可能出现的命名冲突也不会造成影响,有效

    2024年02月04日
    浏览(37)
  • C++ :命名空间域

    目录 冲突与命名: 举个例子: 全局与局部: 域作用限定符:  命名空间域: 命名空间域的使用方式:  加命名空间名称及作用域限定符 使用using将命名空间中某个成员引入 使用using namespace 命名空间名称 引入  嵌套使用 在C语言中,我们通常会使用stdlib.h  而stdlib.h 本质上

    2024年01月22日
    浏览(40)
  • C++——命名空间(namespace)

    目录 1. C语言命名冲突 2. 命名空间定义 3. 命名空间使用 可能大家在看别人写的C++代码中,在一开始会包这个头文件:#includeiostream 这个头文件等价于我们在C语言学习到的#includestdio.h,它是用来跟我们的控制台输入和输出的,这里简要提下,后续详谈。 除了上面这个头文件,

    2024年02月10日
    浏览(42)
  • 【C++】namespace 命名空间

    两个术语: 声明区域:声明区域是可以在其中进行声明的区域。 潜在作用域:变量的潜在作用域从声明点开始,到其声明区域的结尾。因此潜在作用域比声明区域小,这是由于变量必须定义后才能使用。 名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代

    2023年04月08日
    浏览(39)
  • C++命名空间

    目录 一、引入缘故 二、域 三、namespace 四、域作用限定域 五、访问命名空间域         在c语言中,在大型文件内命名冲突问题是一个比较大的缺陷         一般常见的命名冲突可能是 与库函数冲突 内容本身相互冲突         于是引入命名空间的概念 域包括 类域

    2023年04月21日
    浏览(48)
  • 【C++】入门 --- 命名空间

    本篇文章是《C++ 初阶》 专栏的第一篇文章,从本专栏开始就进入了C++的学习了哦!本篇的内容是C++入门:命名空间的学习希望烙铁们可以理解消化哦🥰!!! 🚩C++是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由 本贾尼·斯特劳斯特卢普在ATT贝尔

    2024年02月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包