C++ 名字空间namespace

news2024/9/23 21:21:29

在C++中支持三种域:局部域、名字空间域和类域。
名字空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:

namespace yyn
{
	int g_max = 10;
	float g_pi = 3.14;
	void func()
	{
		...;
	}
}

花括号括起来的部分称声明块。声明块中可以包括:类、变量(带有初始化)、函数(带有定义)等。最外层的名字空间域称为全局名字空间域,即文件域。
名字空间的引入,主要是为了解决全局名字空间污染问题,即防止程序中的全局实体名与其他程序中的全局实体名命名冲突。
示例:

#include<iostream>
//普通的命名空间
namespace yyn
{
	int g_max = 10;
	int g_min = 0;
	int my_add(int a, int b) { return a + b; }
}

//命名空间域可以分层嵌套,同样有分层屏蔽作用
namespace Primer
{
	double pi = 3.1415926535898;
	double my_add(double a, double b) { return a + b; }
	namespace Matrix
	{
		char my_max(char a,char b) { return a > b ? a : b; }
	}
}

//同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成到一个命名空间中
namespace yyn
{
	float pi = 3.14;
	int my_sub(int a, int b)
	{
		g_min = a - b;
		return g_min;
	}
}

一个名字空间就定义了一个新的作用域,命名空间中所有内容都局限于该命名空间中。

名字空间的使用
1.加名字空间及作用域限定符
int main()
{
	int a = yyn::my_add(12, 23);
	printf("%d\n", a);
	printf("%lf\n", Primer::pi);
	printf("%f\n", yyn::pi);
	char ch=Primer::Matrix::my_max('a', 'b');
	printf("%c\n", ch);
	return 0;
}

输出结果如下:
在这里插入图片描述

2.使用using将名字空间中成员引入

使用using声明可只写一次限定修饰名。using声明以关键字using开头,后面是被限定修饰的名字空间成员名:

using yyn::pi;
using Primer::Matrix::my_max;
//名字空间类成员Matrix的using声明
//以后在程序中使用Matrix时,就可以直接使用成员名,而不必使用限定修饰名
int main()
{
	printf("%lf\n", Primer::pi);
	printf("%f\n", pi);//yyn::pi
	char ch = my_max('a', 'b');//Primer::Matrix::my_max
	printf("%c\n", ch);
	return 0;
}

输出结果为:
在这里插入图片描述

2.使用using namespace名字空间名称引入

使用using指示符可以一次性地使名字空间中所有成员都可以直接被使用,比using声明方便。using指示符是以关键字using开头,后面是关键字namespace,然后是名字空间名。
using namespace 名字空间名;
A.h如下:

#pragma once
namespace yyn
{
	int my_add(int, int);
	int my_sub(int, int);
}

A.cpp如下:

#include"A.h"
namespace yyn
{
	int my_add(int a, int b)
	{
		return a + b;
	}
	int my_sub(int a, int b)
	{
		return a - b;
	}
}

Maintest.cpp如下:

using namespace yyn;
int main()
{
	printf("%d", my_add(12, 23));
	return 0;
}

输出结果为:
在这里插入图片描述
使用using指示符:
标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。在采用标准C++的平台上使用标准C++库中的所有组件,只要写一个using指示符:using namespace std;就可以直接使用标准C++库中的所有成员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/798697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多线程与高并发(17)——多线程总结(很全)

总结并复习了一下之前写的多线程的知识&#xff0c;见下图。 不够清楚可私信或者processOn。

983. 最低票价;1911. 最大子序列交替和;894. 所有可能的真二叉树

983. 最低票价 核心思想&#xff1a;对于365天中的一天&#xff0c;如果它不在旅行的日子&#xff0c;我们在这一天可以不花钱&#xff1b;如果它在旅行的日期&#xff0c;那么要么这一天花钱&#xff0c;要么在前面花钱的时间范围内。所以想到了动态规划&#xff0c;对于dp[x…

深入篇【C++】【容器适配器】:(stack)(queue)(priority_queue)模拟实现(详细剖析底层实现原理)

深入篇【C】【容器适配器】: (stack&#xff09;&& (queue&#xff09;&& (priority_queue&#xff09;模拟实现(详细剖析底层实现原理&#xff09; Ⅰ.容器适配器Ⅱ.认识dequeⅢ.stack模拟实现Ⅳ.queue模拟实现Ⅴ.priority_queue模拟实现1.priority_queue()2.…

深度学习入门(一):神经网络基础

一、深度学习概念 1、定义 通过训练多层网络结构对位置数据进行分类或回归&#xff0c;深度学习解决特征工程问题。 2、深度学习应用 图像处理语言识别自然语言处理 在移动端不太好&#xff0c;计算量太大了&#xff0c;速度可能会慢 eg.医学应用、自动上色 3、例子 使用…

ARM将常数加载到寄存器方法之LDR伪指令

一、是什么&#xff1f; LDR Rd,const伪指令可在单个指令中构造任何32位数字常数,使用伪指令可以生成超过MOV和MVN指令 允许范围的常数. 实现原理: (1)如果可以用MOV或MVN指令构造该常数,则汇编程序会生成适当的指令 (2)如果不能用MOV或MVN指令构造该常数,则汇编程序会执行下列…

C++中一些常见的运算符重载代码模板

可重载和不可重载的运算符 C中可重载的运算符如下&#xff1a; 而不可重载的运算符如下&#xff1a; 运算符重载的代码模板 下面是代码中形参的统一解释&#xff1a; lhs: 左操作数&#xff0c;通常为运算符左侧的对象或值。 rhs: 右操作数&#xff0c;通常为运算符右侧的对象…

性能测试、负载测试、压力测试-之间的差异

性能测试、负载测试、压力测试-之间的差异 目录 1、什么是性能测试2、什么是负载测试3、什么是压力测试4、性能测试 vs 负载测试 vs 压力测试5、为什么要进行性能测试6、为什么要进行负载测试7、为什么要进行压力测试8、什么时候使用性能测试9、什么时候使用负载测试10、什么时…

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1&#xff09;巩固对串的理解&#xff1b; 2&#xff09;掌握串的基本操作实现&#xff1b; 3&#xff09;掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…

Ansible安装部署与应用

文章目录 一、ansible简介二、ansible 环境安装部署三、ansible 命令行模块3.1 command 模块3.2 shell 模块3.3 cron 模块3.4 user 模块3.5 group 模块3.6 copy 模块3.7 file 模块3.8 hostname 模块3.9 ping 模块3.10 yum 模块3.11 service/systemd 模块3.12 script 模块3.13 m…

可穿戴设备的发展

目录 1.什么是可穿戴设备 2.可穿戴设备的发展过程 3.可穿戴设备带来的福利 4.可穿戴设备未来的发展趋势 1.什么是可穿戴设备 可穿戴设备是指可以佩戴在身体上并与用户进行交互的电子设备。它们通常以小型、便携和智能化的形式呈现&#xff0c;与用户的服装、配饰或身体部位相…

nplayer读取电脑共享文件

Step 1&#xff1a; 在电脑中开启共享。 ▼想要访问电脑中的文件&#xff0c;电脑上需要有一个含密码的账户。 所以没有密码的首先得去控制面板为当前用户添加一个密码。 ▼下面添加共享文件夹。比如我们想共享music文件夹&#xff0c;则右键该文件夹>属性>共享>高级…

ChatGPT安卓版正式发布,附安装包,但有款手机无法使用

ChatGPT安卓版如约而至&#xff0c;OpenAI正式宣布该应用已在谷歌应用商店上架&#xff0c;用户可以免费下载&#xff0c;对话不限次数。 但是安卓版ChatGPT目前仅在美国、印度、孟加拉国和巴西提供下载&#xff0c;下周将会推广至更多国家。 网页端下载链接&#xff1a; http…

POM+数据驱动+pytest

POM数据驱动pytest 数据驱动&#xff1a;将测试过程中所有测试数据&#xff0c;进行提取、保存以及管理&#xff0c;提升框架的可维护性&#xff0c;一般情况下会使用到的数据类型&#xff1a;Excel、yaml、json、py......&#xff0c;如&#xff1a;登录场景&#xff0c;需要…

《长沙市“1+2+N”先进制造业集群提质升级研究》 课题调研组莅临麒麟信安展开专题调研

为提质升级长沙“12N”先进制造业产业集群&#xff0c;构建与现代产业体系相适应的产业生态&#xff0c;7月11日下午&#xff0c;由长沙市制造业发展促进中心党委书记沈群等市制造业发展促进中心相关领导以及中南大学王昶、卢锋华、朱思文等教授和多位博士、硕士组成的《长沙市…

视频剪辑矩阵分发系统Unable to load FFProbe报错技术处理?

问题一 报错处理 对于视频剪辑矩阵分发系统中出现的“Unable to load FFProbe”报错问题&#xff0c;可以采取以下技术处理措施进行解决。 1.检查系统中是否正确安装了FFProbe工具&#xff0c;并确保其路径正确配置。 2.检查系统环境变量是否正确设置&#xff0c;包括FFPr…

Rete算法相关内容与实例,搞懂Rete算法这一篇文章就够了,有我自己的理解,也有经典的例子详解,非常详细

Rete算法是一个规则匹配算法,是一个高效的规则匹配算法。Drools从3.X版本到7.X版本一直都是基于Rete算法实现规则匹配的,为了进一步了解Drools,所以就研究一下Rete算法。 Rete算法是由美国工程师Charles L. Forgy在1979年提出的。 该算法的设计的目的就是用于高效地处理规…

【设计模式——学习笔记】23种设计模式——装饰器模式Decorator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

生活案例 咖啡厅 咖啡定制案例 在咖啡厅中&#xff0c;有多种不同类型的咖啡&#xff0c;客户在预定了咖啡之后&#xff0c;还可以选择添加不同的调料来调整咖啡的口味&#xff0c;当客户点了咖啡添加了不同的调料&#xff0c;咖啡的价格需要做出相应的改变。 要求&#xff…

SAP安装笔记

1、准备安装介质&#xff0c;SWPM10SP25&#xff0c;51050829_NW750_JavaExport、SAP_HANA_CLIENT、kernel放到/sapcd/NetWeaver目录下 ​​​​​​​ 进入SWPM10SP25执行./sapinst安装 2、待出现 “Open your browser and paste the following URL address to access the G…

如何从0开始搭建公司自动化测试框架?25k入职新公司的我是这样做的..

搭建的自动化测试框架要包括API测试&#xff0c;UI测试&#xff0c;APP测试三类。以上三类其实可以简化为两类&#xff0c;那就是&#xff1a; 1&#xff09;接口自动化测试框架搭建 2&#xff09;UI自动化测试框架搭建。 没问题&#xff0c;安排&#xff0c;且是手把手教你如何…

高校宿舍报修管理系统的设计与实现(论文+源码)_kaic

摘 要 随着科技的发展&#xff0c;信息化的管理手段早以在人们生活的各个方面取代了传统的管理手段&#xff0c;以先进管理理念为基础的现代化信息管理系统已经成为了许多机构的必备工具。在如今大学的校园里&#xff0c;有着许许多多的信息化管理系统&#xff0c;如图书管理系…