Namespace 命名空间的使用

article/2025/6/20 20:55:17

名字空间:划分更多的逻辑空间,有效避免名字冲突的问题

1.什么是命名空间

名字命名空间 namespace 名字空间名 {...}

// 名字空间 n1 域
namespace n1 {// 全局变量int g_money = 0;void save(int money){g_money += money;}void pay(int money){g_money -= money;}
}
2.名字空间合并

名字命名空间 namespace 名字空间名 {...}

名字命名空间 namespace 名字空间名 {...}

编译器会自动将多个名字相同的命名空间合并为一个名字空间

namespace n1 {// 全局变量int g_money = 0;void save(int money){g_money += money;}
}
namespace n1 {void pay(int money){g_money -= money;}
}
3.名字空间声明函数

在命名空间内声明函数,但是在外面定义函数

namespace n3 {// 全局变量int g_money = 0;void save(int money)   // 声明并定义{g_money += money;}void pay(int money);   //  声明
}void n3::pay(int money)  // 定义
{g_money -= money;
}
4.如何使用命名空间呢?(3种)
1) 作用域限定符::
namespace ns {int g_val = 0;
}cout << "ns::g_val = " << ns::g_val << endl;
2)名字空间指令
namespace ns {int g_val = 0;
}using namespace ns;  // 从这行代码开始,ns中的内容在当前作用域可见 -->可见表g_val = 100;cout << "g_val = " << g_val << endl;

如果命名空间和main方法中都有g_val变量,它具体使用哪一个变量呢

namespace ns {int g_val = 0;
}int main() {int g_val = 5;  // 定义表using namespace ns;g_val = 100;cout << "g_val = " << g_val << endl;  // 100  这里找到的是局部变量int g_val = 5; cout << "ns::g_val = " << ns::g_val << endl;  // 0}

此时namespace ns的 int g_val = 0; 和 全局变量 int g_val = 5;会冲突,定义了两个全局变量

namespace ns {int g_val = 0;
}int g_val = 5;  // 全局变量,出现在 可见表int main() {using namespace ns;g_val = 100;cout << "g_val = " << g_val << endl;cout << "ns::g_val = " << ns::g_val << endl;}

此时namespace ns的 int g_val = 0; 和 全局变量 int g_val = 5;会冲突,定义了两个全局变量

此时namespace ns的 int g_val = 0; 和 全局变量 int g_val = 5;会冲突,定义了两个全局变量

namespace ns {int g_val = 0;
}int g_val = 5;using namespace ns;int main() {g_val = 100;cout << "g_val = " << g_val << endl;cout << "ns::g_val = " << ns::g_val << endl;}

3) 名字空间声明
namespace ns {int g_val = 0;
}int main() { // 名字空间声明using ns::g_val;  //  从这行开始,ns中的g_val引入当前作用域(相当于定义在main函数里)g_val = 35;cout << "g_val = " << g_val << endl;  // g_val = 35cout << "ns::g_val = " << ns::g_val << endl;  // ns::g_val = 35}

如果再定义一个局部变量,就会报重复定义的错误 重定义;多次初始化

namespace ns {int g_val = 0;
}int main() {// 名字空间声明using ns::g_val; // 从这行开始,ns中的g_val引入当前作用域(相当于定义在main函数里)int g_val = 3; // 	“ns::g_val”: 重定义;多次初始化	ProjectDemo0525			g_val = 35;cout << "g_val = " << g_val << endl;cout << "ns::g_val = " << ns::g_val << endl;}

如果再定义一个局部变量,就会报重复定义的错误 重复声明

namespace ns {int g_val = 0;
}int main() {int g_val;// 名字空间声明using ns::g_val; // 从这行开始,ns中的g_val引入当前作用域(相当于定义在main函数里)g_val = 35;cout << "g_val = " << g_val << endl;cout << "ns::g_val = " << ns::g_val << endl;}

题目一 下面输出什么内容? 哪个命名空间里的值?
namespace ns1 {int m_val = 0;int m_other = 0;
}namespace ns2 {int m_val = 0;int m_other = 0;
}int main()
{using namespace ns1; //名字空间指令,ns1中的所有内容在当前作用域可见(可见表)using ns2::m_val; // 名字空间声明,ns2中的m_val引入当前作用域(定义表),仅仅只有m_val出现在定义表中m_val = 50;cout << "ns1::m_val = " << ns1::m_val << endl;  // 0cout << "ns2::m_val = " << ns2::m_val << endl;  // 50m_other = 35;cout << "ns1::m_other = " << ns1::m_other << endl;  // 35cout << "ns2::m_other = " << ns2::m_other << endl;  // 0}

猜对了么? 输出的是 ns2::m_val 和 ns1::m_other 有值

using namespace ns1; //名字空间指令,ns1中的所有内容在当前作用域可见(可见表)

using ns2::m_val;; //名字空间声明,ns2中的m_val引入当前作用域(定义表),仅仅只有m_val出现在定义表中


http://www.hkcw.cn/article/WRgWuAEZuX.shtml

相关文章

力扣热题100之翻转二叉树

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 代码 方法一&#xff1a;递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

simulink mask的使用技巧

1.mask界面布局 1.1如何调整控件的位置和控件大小&#xff1f; 反正2020a是调不了&#xff0c; 找了好久&#xff0c;只能是调布局&#xff0c;例如你要调成下面这样&#xff1a; 第一个控件的iTem location属性选择New row 后面跟着的几个和第一个同一行的空间属性选择Cu…

第12讲、Odoo 18 权限控制机制详解

目录 引言权限机制概述权限组&#xff08;Groups&#xff09;访问控制列表&#xff08;ACL&#xff09;记录规则&#xff08;Record Rules&#xff09;字段级权限控制按钮级权限控制菜单级权限控制综合案例&#xff1a;多层级权限控制最佳实践与注意事项总结 引言 Odoo 18 提…

AIGC学习笔记(8)——AI大模型开发工程师

文章目录 AI大模型开发工程师007 LangChain之Model IO模块1 Model IO核心概念2 Model IO代码实战什么是LCEL&#xff1f;ModelModel的分类LLMsChatModel PromptPrompt templatesExample selectorsOutput parsers AI大模型开发工程师 007 LangChain之Model IO模块 1 Model IO核…

Java 文件操作 和 IO(5)-- 综合案例练习 -- 示例一

题目描述&#xff1a;扫描指定目录&#xff0c;并找到名称中包含指定字符的所有普通文件&#xff08;不包含目录&#xff09;&#xff0c;并且后续询问用户是否要删除该文件 文章目录 题目描述&#xff1a;扫描指定目录&#xff0c;并找到名称中包含指定字符的所有普通文件&…

Leetcode 465. 最优账单平衡

1.题目基本信息 1.1.题目描述 给你一个表示交易的数组 transactions &#xff0c;其中 transactions[i] [fromi, toi, amounti] 表示 ID fromi 的人给 ID toi 的人共计 amounti $ 。 请你计算并返回还清所有债务的最小交易笔数。 1.2.题目地址 https://leetcode.cn/pro…

【沉浸式求职学习day51】【发送邮件】【javaweb结尾】

沉浸式求职学习 邮件发送原理及实现1.概述2.简单邮件3.复杂邮件 网站注册发送邮件功能实现 邮件发送原理及实现 1.概述 传输协议 SMTP协议 发送邮件&#xff1a; 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。POP3协议 接收邮件&#…

标题:2025海外短剧爆发年:APP+H5双端系统开发,解锁全球流量与变现新大陆

描述&#xff1a; 2025年出海新风口&#xff01;深度解析海外短剧系统开发核心&#xff08;APPH5双端&#xff09;&#xff0c;揭秘高效开发策略与商业化路径&#xff0c;助您抢占万亿美元市场&#xff01; 全球娱乐消费模式正在剧变。2025年&#xff0c;海外短剧市场已从蓝海…

uni-app学习笔记十六-vue3页面生命周期(三)

uni-app官方文档页面生命周期部分位于页面 | uni-app官网。 本篇再介绍2个生命周期 1.onUnload&#xff1a;用于监听页面卸载。 当页面被关闭时&#xff0c;即页面的缓存被清掉时触发加载onUnload函数。 例如:在demo6页面点击跳转到demo4&#xff0c;在demo4页面回退不了到d…

钉钉红包性能优化之路

一、业务背景 请客红包、小礼物作为饿了么自研的业务产品&#xff0c;在钉钉的一方化入口中常驻&#xff0c;作为高UV、PV的toB产品&#xff0c;面对不同设备环境的用户&#xff0c;经常会偶尔得到一些用户反馈&#xff0c;如【页面白屏太久了】、【卡住了】等等&#xff0c;本…

鲲鹏Arm+麒麟V10 K8s 离线部署教程

针对鲲鹏 CPU 麒麟 V10 的离线环境&#xff0c;手把手教你从环境准备到应用上线&#xff0c;所有依赖包提前打包好&#xff0c;步骤写成傻瓜式操作指南。 一、环境规划# 准备至少两台机器。 架构OS作用Arm64任意&#xff0c;Mac 也可以下载离线包Arm64麒麟 V10单机部署 K8s…

Redis主从复制详解

概述 Redis 的主从复制&#xff08;Master-Slave Replication&#xff09;是实现数据备份、读写分离和水平扩展的核心机制之一。通过主从复制&#xff0c;一个主节点&#xff08;Master&#xff09;可以将数据同步到多个从节点&#xff08;Slave&#xff09;&#xff0c;从节点…

16.进程间通信(二)

一、命名管道 1.概念 匿名管道解决了具有血缘关系的进程之间的通信&#xff0c;如果两个进程毫不相干&#xff0c;如何进行通信呢&#xff1f;通过文件&#xff0c;管道文件。 对于两个不同进程&#xff0c;打开同一路径下的同一文件&#xff0c;inode和文件内核缓冲区不会加载…

优化的两极:凸优化与非凸优化的理论、应用与挑战

在机器学习、工程设计、经济决策等众多领域&#xff0c;优化问题无处不在。而在优化理论的世界里&#xff0c;凸优化与非凸优化如同两个截然不同的 “王国”&#xff0c;各自有着独特的规则、挑战和应用场景。今天&#xff0c;就让我们深入探索这两个优化领域的核心差异、算法特…

day15 leetcode-hot100-29(链表8)

19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 1.暴力法 思路 &#xff08;1&#xff09;先获取链表的长度L &#xff08;2&#xff09;然后再次遍历链表到L-n的位置&#xff0c;直接让该指针的节点指向下下一个即可。 2.哈希表 思路 &#xff0…

rtpinsertsound:语音注入攻击!全参数详细教程!Kali Linux教程!

简介 2006年8月至9月期间&#xff0c;我们创建了一个用于将音频插入指定音频&#xff08;即RTP&#xff09;流的工具。该工具名为rtpinsertsound。 该工具已在Linux Red Hat Fedora Core 4平台&#xff08;奔腾IV&#xff0c;2.5 GHz&#xff09;上进行了测试&#xff0c;但预…

谷歌Stitch:AI赋能UI设计,免费高效新利器

在AI技术日新月异的今天&#xff0c;各大科技巨头都在不断刷新我们对智能工具的认知。最近&#xff0c;谷歌在其年度I/O开发者大会期间&#xff0c;除了那些聚光灯下的重磅发布&#xff0c;还悄然上线了一款令人惊喜的AI工具——Stitch。这是一款全新的、完全免费的AI驱动UI&am…

PowerBI企业运营分析——线性回归销售预测

PowerBI企业运营分析——线性回归销售预测 欢迎来到Powerbi小课堂&#xff0c;在竞争激烈的市场环境中&#xff0c;企业运营分析平台成为提升竞争力的核心工具。 该平台通过整合多源数据&#xff0c;实现关键指标的实时监控&#xff0c;从而迅速洞察业务动态&#xff0c;精准…

<4>, Qt窗口

目录 一&#xff0c;菜单栏 二&#xff0c;工具栏 三&#xff0c;状态栏 四&#xff0c;浮动窗口 五&#xff0c;对话框 一&#xff0c;菜单栏 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// 创建菜单栏…

多目标粒子群优化算法(MOPSO),用于解决无人机三维路径规划问题,Matlab代码实现

多目标粒子群优化算法&#xff08;MOPSO&#xff09;&#xff0c;用于解决无人机三维路径规划问题&#xff0c;Matlab代码实现 目录 多目标粒子群优化算法&#xff08;MOPSO&#xff09;&#xff0c;用于解决无人机三维路径规划问题&#xff0c;Matlab代码实现效果一览基本介绍…