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

news/2024/12/20 2:06:51/

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

在这里插入图片描述
在这里插入图片描述

文章目录

  • 😇命名空间的前情介绍
  • 😇本章详情
  • 😇传统的C++名称空间
    • 📝声明区域(declaration region)
  • ✉新的名称空间特性
    • 📋C++新增的功能
    • 😇using声明和using编译指令
  • 📃如何巩固学习
  • 📃本文小结

😇命名空间的前情介绍

😁在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 declarationfloat pail;std::cin >> pail;mei::pail = 12.22;zhi::price = 10.1;return 0;
}

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

在这里插入图片描述
由于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 declarationint 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希望可以帮助到你们噢,最后别忘记三连啦!!

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/1098968.html

相关文章

存储概念|详解大小端存储

0.前言 1.数据的高位和低位 2.高地址和低地址 3.大端存储和小端存储 4.为什么会有大小端存储 5.验证C语言的数据的存储是大端还是小端 0.前言 大小端存储是计算机存储的一个设计概念&#xff0c;涉及了高地址和低地址&#xff0c;数据的高位和低位等概念&#xff0c;所以…

Delphi、C# 和 TypeScript 之父 Anders Hejlsberg(安德斯·海尔斯伯格,海神)赶潮AI

自2022年11月ChatGPT横空出世&#xff0c;一波由AIGC引发的热潮轰轰烈烈持续传播。 全球各国政府及大型互联网企业都在积极布局人工智能解决方案&#xff0c;抢占人工智能高地&#xff0c;推动人工智能产业健康发展。 Delphi、C# 和 TypeScript 之父&#xff0c;位列Microsof…

复制tr的一行数据或者复制数据使用,使用jq和php

效果图&#xff1a; 2.Html <!--复制的tr数据&#xff0c;s----------------------------------------------------------------------------------------------->{foreach from$arrs keykk itemvv} <tr><td style"text-align:center;" >1</t…

[运维|系统] go程序设置开机启动踩坑笔记

参考文献 记systemctl启动go程序 在Ubuntu上作为systemctl服务运行时Go找不到文件 go语言程序设置开机启动&#xff0c;配置不生效 需要在服务配置文件中加入工作目录配置&#xff0c;示例 WorkingDirectory/path/to/go/program/directory

P2111 考场奇遇 ( 期望dp

#include <bits/stdc.h> using namespace std; using VI vector<int>; double dp[2000010];int n,q; double a; string s; //1 表示答案一样 0表示答案不一样 //答案一样时 正确的概率为 a 不一样时正确的概率为 1 - a //第 i 个题目时&#xff0c;至少对j个题目…

C/C++之链表的建立

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.头插 1.1简介 1.2代码实现头插 …

判断动物知识竞猜答案正误

判断动物知识竞猜答案正误 教学目标 1&#xff0e; 知识与技能&#xff1a; 结合实例&#xff0c;理解选择结构。掌握if语句的基本格式&#xff0c;掌握关系运算符。 过程与方法&#xff1a; 学会使用if编程解决实际生活中的一些问题。 情感态度与价值观&#xff1a; 教…

【实训】“宅急送”订餐管理系统(程序设计综合能力实训)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 前言 大一小学期&#xff0c;我迎来了人生中的第一次实训…