【C++奇遇记】初探名称空间

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

🎬 博客主页:博主链接
🎥 本文由 M malloc 原创,首发于 CSDN🙉
🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨

【C++奇遇记】初探名称空间,c++奇遇记,c++,开发语言
【C++奇遇记】初探名称空间,c++奇遇记,c++,开发语言

😇命名空间的前情介绍

😁在C++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。例如:两个库可能都定义了名为List、Tree和Node的类,但定义的方式不兼容。用户可能希望使用一个库的List类,而使用另一个库的Tree类。这种冲突被称为名称空间问题。

😇本章详情

🐤本篇文章将讲授C++的命名空间相关的知识

😇传统的C++名称空间

📝声明区域(declaration region)

前言

声明区域是可以在其中进行声明的区域。例如,可以在函数外面声明全局变量,对于这种变量,其声明区域为其声明所在的文件。对于在函数中声明的变量,其声明区域可以为其声明所在的代码块。


潜在作用域(potential scope)

变量的潜在作用域从声明点开始,到其声明区域的结尾,因为潜在作用域比声明区域小,这是由于变量必须定义后才能使用。


C++关于全局变量和局部变量的规定定义了一种名称空间层次。每个声明区域都可以声明名称,这些名称独立于在其他声明区域中声明的名称。在一个函数中声明的局部变量不会与在另一个函数中声明的局部变量发生冲突。

#include<iostream>
using namespace std;
int add(int left, int right)
{
	return left + right;
}
double add(double left, double right)
{
	return left + right;
}
void Swap(int* p1, int* p2)
{}
void Swap(double* p1, double* p2)
{}

int main()
{
	cout << add(1, 1) << endl;
	cout << add(1.1, 1.1) << endl;

	return 0;
}

在上述代码中从#include 到最后一个有括号为止都属于声明区(全局名称空间)

✉新的名称空间特性

📋C++新增的功能

💐通过定义一种新的声明区域来创建命名的名称空间,这样做的目的之一是提供一个声明名称的区域。一个名称空间中的名称不会与另外一个名称空间的想通名称发生冲突,同时允许程序的其他部分使用该名称空间中声明的东西。例如,下面的代码使用新的关键字namespace创建了两个名称空间:

输入

namespace mei
{
	double pail;
	float price;
	int pal;
}
namespace zhi
{
	double fetch;
	float price;
	int pal;
}

注意

名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代码块中。因此,在默认的情况下,在名称空间中声明的名称的链接性为外部的(除非它引用了常量)


全局名称空间(global namespace)

🌱它对应于文件级声明区域,因此前面所说的全局变量现在被描述为位于全局名称空间中。


作用域解析运算符::

🌻我们需要一种方法来访问给定名称空间中的名称。最简单的方法就是,通过作用域解析运算符::,使用名称空间来限定该名称:

#include<iostream>
namespace mei
{
	double pail;
	float price;
	int pal;
}
namespace zhi
{
	double fetch;
	float price;
	int pal;
}
int main()
{
	mei::pail = 12.22;
	zhi::price = 10.1;
	return 0;
}

😇using声明和using编译指令

📖我们并不希望每次使用名称时都对它进行限定,因此C++提供了两种机制(using声明和using编译指令)来简化对名称空间中名称的使用。using声明使特定的标识符可用,using编译指令使整个名称空间可用

using声明由被限定的名称和它前面的关键字using组成:

using mei::pail;//a using declaration

🌼using声明将特点名称添加到它所属的声明区域中。例如main()中的using声明mei::pail将pail添加到main()定义的声明区域中。完成该声明后,便可以使用名称pail代替mei::pail。下面的代码说明了这几点:

#include<iostream>

namespace mei
{
	double pail;
	float price;
	int pal;
}
namespace zhi
{

	double fetch;
	float price;
	int pal;
}
double pail;
int main()
{
	using mei::pail;//a using declaration

	float pail;
	std::cin >> pail;
	mei::pail = 12.22;
	zhi::price = 10.1;
	return 0;
}

我们来看上述代码,其实上述代码是会报错的,我们来看报错信息

【C++奇遇记】初探名称空间,c++奇遇记,c++,开发语言
由于using声明将名称添加到局部声明区域中。因此这个示例避免了将另一个局部变量也命名为pail另外,和其他局部变量一样,pail也将覆盖同名的全局变量

在函数的外名声明时,将把名称添加到全局名称空间中:

#include<iostream>
void other();
namespace mei
{
	double pail;
	float price;
	int pal;
}
namespace zhi
{

	double fetch;
	float price;
	int pal;
}
using mei::pail;//a using declaration

int main()
{
	std::cin >> pail;
	other();
	return 0;
}
void other()
{
	std::cout << pail << std::endl;
}

using声明使一个名称可用,而using编译指令使所有名称都可用。using编译指令由名称空间名和它前面的关键字using namespace 组成,它使名称空间中的所有名称都可用,而不需要使用作用域解析运算符::

using namespace mei;

在使用using编译指令和using声明,需要记住的一点是,它们增加了名称冲突的可能性

📃如何巩固学习

提示:在学习的过程中,我们需要先自行进行思考,并且多去阅读一些大佬的书籍,俗话说的好,书籍是人类进步的阶梯!

📃本文小结

  1. C++鼓励程序员在开发程序时使用多个文件。一种有效的组织策略是,使用头文件来定义,为操纵用户类型的函数提供函数原型;并将函数定义放在一个独立的源代码文件中。头文件和源代码文件一起定义和实现了用户定义的类型及其使用方式。最后,将main()和

好啦今日的分享到这里就结束啦,我是爱你们的M malloc希望可以帮助到你们噢,最后别忘记三连啦!!

【C++奇遇记】初探名称空间,c++奇遇记,c++,开发语言

【C++奇遇记】初探名称空间,c++奇遇记,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-621991.html

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

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

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

相关文章

  • 【C++奇遇记】智能的函数探幽

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 🐤本篇文章将讲授C++的命名空间相关的知识

    2024年02月13日
    浏览(38)
  • 【C++奇遇记】构造函数 | 初始化列表

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 🐤本篇文章将讲授C++的初始化列表相关的知识

    2024年02月12日
    浏览(57)
  • 【Linux取经路】初探进程地址空间

    之前在介绍 fork 函数的时候说过该函数返回了两次,至于为什么会返回两次,以及 fork 函数是如何做到返回两次的,在【Linux取经路】揭秘进程的父与子一文中已经做了详细的解释,忘了小伙伴可以点回去看看。在解释一个变量怎么会有两个不同值的时候,当时的说法是由于

    2024年01月21日
    浏览(50)
  • 【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

    铁子们好啊!这是阿辉新开的专栏《拿下C++》的第一篇文章,本文主要带大家了解一下C++,带大家从C语言过渡到C++,所以大家首先要有C语言的基础,否则后面的内容你可能会异常懵逼。不会C语言的铁子,这里推荐各位先看阿辉的专栏《爱上C语言》(点击即可跳转,自荐一下

    2024年02月03日
    浏览(37)
  • C#学习 - 初识类与名称空间

    类 是最基础的 C# 类型,是一个数据结构,是构成程序的主体 名称空间 以树型结构组织 类 上段代码中:Program和Console就是类;ConsoleApp就是名称空间 建立了一个叫Program的类放在了一个叫ConsoleApp的名称空间中 类库 引用是使用名称空间的物理基础 引用方式:DLL引用、项目引用

    2024年02月09日
    浏览(32)
  • Python名称空间和作用域,闭包函数

    名称的查询顺序 名称空间的作用域 global和nonlocal的使用 函数对象(函数名) 函数的嵌套调用 函数的嵌套定义 闭包函数

    2024年02月09日
    浏览(41)
  • 【Kubernetes资源篇】Namespace名称空间详解

    K8s中文手册: K8s名称空间中文官方手册: Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。 命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间。 在Kubernetes中,名称空间可以用来:

    2024年02月12日
    浏览(41)
  • HBase(15):表结构设计之名称空间

    1 说明 在一个项目中,需要使用HBase保存多张表,这些表会按照业务域来划分 为了方便管理,不同的业务域以名称空间(namespace)来划分,这样管理起来会更加容易 类似于Hive中的数据库,不同的数据库下可以放不同类型的表 HBase默认的名称空间是「default」,默认情况下,创建

    2024年02月14日
    浏览(36)
  • 【数据结构】初探时间与空间复杂度:算法评估与优化的基础

    🚩 纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要了解算法的时间复杂度与空间复杂度等相关知识。 📗时间复杂度和空间复杂度是计算机科学中用来评估算法效率的两个重要概念。它们分别描述了算法在执行时间和额外内存使用方

    2024年02月08日
    浏览(45)
  • Linux网络名称空间之独立网络资源管理

    Linux网络名称空间是一种强大的虚拟化技术🛠️,它允许用户创建隔离的网络环境🌐,每个环境拥有独立的网络资源和配置。这项技术对于云计算☁️、容器化应用📦和网络安全🔒等领域至关重要。本文将详细介绍在Linux网络名称空间中可以拥有的独立网络资源,并指出应

    2024年04月11日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包