Namespace 命名空间的使用
名字空间:划分更多的逻辑空间,有效避免名字冲突的问题
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出现在定义表中
5.1 名字空间嵌套
namespace md1 {namespace md2 {namespace md3 {namespace md4 {int f = 30;}}}
}int main() {cout << md1::md2::md3::md4::f << endl; // 30}
名字空间别名可以简化书写
namespace md_four = md1::md2::md3::md4;cout << md_four::f << endl; // 30
相关文章:

Namespace 命名空间的使用
名字空间:划分更多的逻辑空间,有效避免名字冲突的问题 1.什么是命名空间 名字命名空间 namespace 名字空间名 {...} // 名字空间 n1 域 namespace n1 {// 全局变量int g_money 0;void save(int money){g_money money;}void pay(int money){g_money - m…...

mac 下安装Rust Toolchain(Nightly)
你可以用 Homebrew 安装 rustup,这是推荐的管理 Rust toolchain的 brew install rustup-init安装 Rust(包含 rustup) rustup-init安装过程中会让你选择安装那个,直接回车选择默认的即可 安装完成后,cargo, rustc, r…...
PHP中文网文章内容提取免费API接口教程
接口简介: 提取PHP中文网指定文章内容。本接口仅做内容提取,未经作者授权请勿转载。 请求地址: https://cn.apihz.cn/api/caiji/phpzww.php 请求方式: POST或GET。 请求参数: 【名称】【参数】【必填】【说明】 【用…...
【Java笔记】Spring IoC DI
目录 Spring IoC & DI1. IoC1.1 Bean的存储1.1.1 类注解1.1.2 方法注解 Bean1.1.3 重命名1.1.4 Spring扫描路径 2. DI Spring IoC & DI Spring两个核心思想:IoC & AOP Spring相当于一个容器,IoC就是把对象存放在Spring容器中,让…...

学习STC51单片机22(芯片为STC89C52RCRC)
记住这个AT指令千万不要去脑子记,要用手册查 每日一言 努力不是为了感动谁,而是为了不辜负自己的野心。 硬件:ESP8266 wife模块 蓝牙,ESP-01s,Zigbee,NB-lot等通信模块都是基于AT指令的设计 老样子 我们用…...
ubuntu20.04.5--arm64版上使用node集成java
ubuntu20.04.5arm上使用node集成java #ssh,可选 sudo apt update sudo apt install openssh-server sudo systemctl status ssh sudo systemctl enable ssh sudo systemctl enable --now ssh #防火墙相关,可选 sudo ufw allow ssh sudo ufw allow 22…...

Linux --UDP套接字实现简单的网络聊天室
一、Server端的实现 1.1、服务端的初始化 ①、创建套接字: 创建套接字接口: #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); //1. 这是一个创建套接字的接…...
嵌入式学习笔记 - keil安装目录下的头文件自动包含问题
Keil MDK/MDK-ARM(ARM编译器)默认情况下会自动包含其安装目录下的标准头文件路径(如CMSIS库、设备头文件等)。具体机制如下: 默认自动包含: 新建工程或使用设备数据库选择芯片型号后,Keil会…...

word批量导出visio图
具体步骤 修改word格式打开VBA窗口插入代码运行代码 修改word格式 将word文档修改为docm格式 打开VBA窗口 打开开发工具VisualBasic项,如果没有右键在自定义功能区添加 插入代码 插入 -> 模块,代码如下: Sub ExportAllVisioDiagrams()D…...
把数据库做得能扩展:Aurora DSQL 的故事
把数据库做得能扩展:Aurora DSQL 的故事 我们在 AWS re:Invent 上发布了 Aurora DSQL,这是一个全新方式构建关系型数据库的尝试。它不是单纯的技术升级,而是一段从零开始、反复试错、不断学习的工程旅程。 我们为什么做 Aurora DSQL&#x…...
全面解析:npm 命令、package.json 结构与 Vite 详解
全面解析:npm 命令、package.json 结构与 Vite 详解 一、npm run dev 和 npm run build 命令解析 1. npm run dev 作用:启动开发服务器,用于本地开发原理: 启动 Vite 开发服务器提供实时热更新(HMR)功能…...

【本地部署】 Deepseek+Dify创建工作流
文章目录 DeepseekDify 简介流程1、下载Docker2、Dify下载3、使用浏览器打开 Deepseek Deepseek 是一款功能强大的 AI 语言模型工具,具备出色的理解与生成能力。它可以处理各种自然语言任务,无论是文本创作、问答,还是数据分析与解释&#x…...
Rust 配置解析`serde` + `toml`
🦀 Rust 配置解析:彻底搞懂 TOML、Option、Vec、derive 背后的原理 📌 目录 什么是 TOML 文件?为什么要用 serde toml crate?结构体上 #[derive(...)] 是什么?配置中数组 [] 和表数组 [[...]] 怎么用&…...
linux进程用户态内存泄露问题从进程角度跟踪举例
我们习惯性的会看下那个进程在泄漏内存,我这里使用一个test_malloc的测试进程,该进程每2秒钟会分配一个10000字节的空间,并作简单赋值(注意:如果仅malloc而不使用,编译器会优化,实际测试时将看不…...

数据结构-图的应用,实现环形校验和拓扑排序
文章目录 一、如何理解“图”?1.什么是图?2.无向图和有向图3.无权图和有权图 二、JGraphT-图论数据结构和算法的 Java 库1.引入Maven依赖2.环形校验2.1 什么是循环依赖 ?2.2 单元测试代码2.3 情况1:自己依赖自己2.4 情况2…...
交换机 路由器
在计算机网络中,S 和 R 常常分别代表以下设备: S:Switch(交换机)R:Router(路由器) 简要说明: Switch(交换机,S) 交换机工作在数据链…...

某乎x-zse-96 破解(补环境版本)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、总体概述二、请求分析分析请求流程三、逆向分析总结一、总体概述 本文主要实现某乎x-zse-96 破解(补环境版本),相关的链接: https://www.zhihu.com/search?type=content&q=%25E7%258…...

VSCode+Cline 安装配置及使用说明
安装配置 打开VSCode,点击左侧Extension图标,在弹出页面中,检索Cline,选择Cline进行安装。 安装完毕,在左侧会出现一个图标,点击图标 选择【Use your own API key】,在出来的界面中选择大模型&…...
Java中Redis面试题集锦(含过期策略详解)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java中Redis面试题集锦(含过期策…...

Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)
Apache Maven 是一款广泛应用于 Java 项目的项目管理和构建工具。 本文提供在 Windows、Linux 和 macOS 系统上安装与配置 Maven 的详细步骤,旨在帮助开发者快速搭建高效的构建环境。 一、前置条件:安装 Java Development Kit (JDK) Maven 依赖于 Java …...

android 媒体框架之MediaCodec
一、MediaCodec 整体架构与设计思想 MediaCodec 是 Android 底层多媒体框架的核心组件,负责高效处理音视频编解码任务。其架构采用 生产者-消费者模型,通过双缓冲区队列(输入/输出)实现异步数据处理: 输入缓冲区队列…...

堆与堆排序及 Top-K 问题解析:从原理到实践
一、堆的本质与核心特性 堆是一种基于完全二叉树的数据结构,其核心特性为父节点与子节点的数值关系,分为大堆和小堆两类: 大堆:每个父节点的值均大于或等于其子节点的值,堆顶元素为最大值。如: 小堆:每个…...
Linux中检查当前用户是不是root
Linux中检查当前用户是不是root 检查当前用户是否为root用户。如果是root用户,输出“当前用户是root”;否则,输出“当前用户不是root”。 创建一个 aaa.sh脚本文件 写入如下内容 #!/bin/bash# 检查当前用户的UID是否为0(root用…...

软件锁:守护隐私,安心无忧
数字化时代,手机已成为我们生活中不可或缺的一部分,它不仅存储着我们的个人信息、照片、聊天记录等重要数据,还承载着我们的社交、娱乐和工作等多种功能。然而,这也意味着手机上的隐私信息面临着诸多泄露风险。无论是家人、朋友还…...

无人机桥梁3D建模、巡检、检测的航线规划
无人机桥梁3D建模、巡检、检测的航线规划 无人机在3D建模、巡检和检测任务中的航线规划存在显著差异,主要体现在飞行高度、航线模式、精度要求和传感器配置等方面。以下是三者的详细对比分析: 1. 核心目标差异 任务类型主要目标典型应用场景3D建模 生成…...
项目:贪吃蛇实现
头文件 snake.h #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<locale.h> #include<stdbool.h> #include<time.h>#define POS_X 24#define POS_Y 5 #define BODY L● #define FOOD L★ #define KEY_PRESS(VK) ((…...

【Java基础05】面向对象01
文章目录 1. 设计对象并使用1.1 类与对象1.2 封装1.2.1 private关键字1.2.2 this关键字成员变量和局部变量的区别 1.2.3 构造方法1.2.4 标准JavaBean类 1.3 对象内存图 本文部分参考这篇博客 1. 设计对象并使用 1.1 类与对象 public class 类名{1、成员变量(代表属性,一般是名…...

设计模式:观察者模式 - 实战
一、观察者模式场景 1.1 什么是观察者模式? 观察者模式(Observer Pattern)观察者模式是一种行为型设计模式,用于定义一种一对多的依赖关系,当对象的状态发生变化时,所有依赖于它的对象都会自动收到通知并更…...
8.8 Primary ODSA service without ODSA Portal
主要ODSA服务(不使用ODSA门户) 以下场景描述如下情况: • 主ODSA客户端应用程序被允许用于该类型的主设备,且对终端用户启用(已授权)。 • 服务提供商(SP)能够在不涉及ODSA门户Web服…...

YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取
文章目录 引言GhostNetv2概述GhostNet回顾GhostNetv2创新 YOLOv8主干网络改进原YOLOv8主干分析GhostNetv2主干替换方案整体架构设计关键模块实现 完整主干网络实现YOLOv8集成与训练模型集成训练技巧 性能对比与分析计算复杂度对比优势分析 部署优化建议结论与展望 引言 目标检…...