c++ namespace详解

在C++中,命名空间(namespace)是一种用于组织代码的机制,能够避免命名冲突。通过命名空间,可以将相关的类、函数、变量等组织在一起,使代码更具结构性和可读性。

使用命名空间

定义命名空间
你可以使用关键字 namespace 来定义一个命名空间。以下是一个简单的例子:

namespace MyNamespace {int add(int a, int b) {return a + b;}class MyClass {public:void display() {std::cout << "Hello from MyClass" << std::endl;}};
}

访问命名空间中的成员
要访问命名空间中的成员,可以使用作用域解析运算符 :::

#include <iostream>
using namespace std;int main() {int sum = MyNamespace::add(3, 4);cout << "Sum: " << sum << endl;MyNamespace::MyClass obj;obj.display();return 0;
}

使用 using 关键字
为了简化代码,可以使用 using 关键字引入命名空间的成员:

#include <iostream>
using namespace std;using MyNamespace::add;
using MyNamespace::MyClass;int main() {int sum = add(3, 4);cout << "Sum: " << sum << endl;MyClass obj;obj.display();return 0;
}

或者引入整个命名空间:

#include <iostream>
using namespace std;using namespace MyNamespace;int main() {int sum = add(3, 4);cout << "Sum: " << sum << endl;MyClass obj;obj.display();return 0;
}

嵌套命名空间
命名空间可以嵌套定义,从而创建层次化的命名空间:

namespace OuterNamespace {namespace InnerNamespace {int multiply(int a, int b) {return a * b;}}
}int main() {int product = OuterNamespace::InnerNamespace::multiply(3, 4);cout << "Product: " << product << endl;return 0;
}

匿名命名空间
匿名命名空间(也称为未命名命名空间)中的成员只能在定义它们的翻译单元(通常是单个源文件)中访问,这可以用于实现文件级别的封装:

namespace {int secretFunction(int a) {return a * a;}
}int main() {int result = secretFunction(5);cout << "Result: " << result << endl;return 0;
}

命名空间的分割
可以在多个地方定义相同的命名空间,从而将其内容分布在多个文件或多个地方:

// File1.cpp
namespace MyNamespace {void function1() {cout << "Function 1" << endl;}
}// File2.cpp
namespace MyNamespace {void function2() {cout << "Function 2" << endl;}
}// Main.cpp
#include <iostream>
using namespace std;int main() {MyNamespace::function1();MyNamespace::function2();return 0;
}

命名空间别名
可以为命名空间定义别名,以便于使用:

namespace MyNamespace {void display() {cout << "Hello from MyNamespace" << endl;}
}namespace MN = MyNamespace;int main() {MN::display();return 0;
}

标准命名空间
C++标准库中的所有组件都在命名空间 std 中,例如 std::cout, std::vector, std::string 等。因此,通常会在文件开头使用 using namespace std; 来简化代码,但在大型项目中最好避免这种做法,以减少命名冲突的风险。

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> v = {1, 2, 3, 4};for (int i : v) {cout << i << " ";}cout << endl;return 0;
}

通过使用命名空间,可以有效地组织代码,避免命名冲突,使代码更具可读性和可维护性。

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

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

相关文章

香港Web3时代:比特币可以成为「收益性资产」吗?

原文标题&#xff1a;《CAN BITCOIN BE A PRODUCTIVE ASSET?》撰文&#xff1a;Pascal Hgli编译&#xff1a;Chris&#xff0c;Techub News本文来源香港Web3媒体 Techub News 比特币正在经历一场大的变化&#xff0c;人们对其性质有不同的看法。有些人将其视为日常交易的货币…

数据结构试题 16-17

先这样吧&#xff0c;&#xff0c;专业课不是统考&#xff0c;我发现每年的卷子风格都不太一样&#xff0c;侧重点也不一样。以及21的和16的发生了很大的改变。等明年1月再看看吧 那就先over啦 数据结构撒花&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&am…

基于single flight来解决缓存击穿

目录 1. 缓存击穿2. 常见解决方案3.single flight方式3.1 模拟业务场景3.2 使用single flight的方式 缓存雪崩、缓存击穿、缓存穿透不单单是缓存领域的经典场景&#xff0c;更是面试当牛马时必备&#xff08;背&#xff09;八股文。 我们来讨论下缓存击穿场景下的解决方案。 …

【AI开发】RAG基础

RAG的基本流程&#xff1a; 用一个loader把knowledge base里的知识做成一个个的document&#xff0c;然后把document切分成snippets&#xff0c;把snippets通过embedding&#xff08;比如openai的embedding模型或者huggingface的&#xff09;向量化&#xff0c;存储到vectordb…

git 配置私人令牌

这里写自定义目录标题 获取私人令牌配置个人令牌 获取私人令牌 在个人设置里点击私人令牌选型&#xff0c;之后生成令牌即可。注意&#xff1a;令牌只会出现一次&#xff0c;务必保存好。 配置个人令牌 个人令牌&#xff1a;3c15c866fa61066212a83c66fd8133ba # 进入项目文…

.NET C# 实现国密算法加解密

.NET C# 实现国密算法加解密 概述1. SM12. SM23. SM34. SM45. SM76. SM97. ZUC C#代码实现1 SM22 SM33 SM4 概述 国密算法&#xff08;SM算法&#xff09;是中国国家密码管理局制定的一系列密码算法标准。这些算法被广泛应用于各种信息安全领域&#xff0c;包括通信、电子商务…

护眼灯对眼睛有伤害吗?千万要小心的行业四大弊端内幕

护眼灯&#xff0c;作为现代家居与办公环境中不可或缺的照明伴侣&#xff0c;因其普及性广受青睐。然而&#xff0c;随着大众对视觉健康意识的逐渐增强&#xff0c;一个疑问悄然滋生&#xff1a;护眼灯对眼睛有伤害吗&#xff1f;这一问题不仅触及到了人们对视觉健康的深层担忧…

MLOps模型部署的三种策略:批处理、实时、边缘计算

机器学习运维&#xff08;MLOps&#xff09;是一组用于自动化和简化机器学习&#xff08;ML&#xff09;工作流程和部署的实践。所选择的部署策略可以显著影响系统的性能和效用。所以需要根据用例和需求&#xff0c;采用不同的部署策略。在这篇文章中&#xff0c;我们将探讨三种…

Java家政预约系统源码 家政上门APP源码 家电安装、维修、清洗、美容系统源码、家政系统各端功能细分

Java家政预约系统源码 家政上门APP源码 家电安装、维修、清洗、美容系统源码、家政系统各端功能细分 家政服务系统是一种提供家政服务的系统&#xff0c;它可以为客户提供上门家庭清洁、钟点工、保姆、月嫂、育婴师、护理员等家政服务。节省时间和成本&#xff0c;提高效率&…

网络层只懂路由?这9个知识点被严重低估了

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 网络层想必你已经耳熟能详&#xff0c;它的作用自然是不容小觑。 它负责将数据从源头准确地投递到目的地&am…

9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法

execute()方法用于执行SQL语句&#xff0c;其语法格式如下&#xff1a; jdTemplate.execute("SQL 语句");下面以创建数据表的SQL语句为例&#xff0c;来演示excute()方法的使用&#xff0c;具体步骤如下。 1、创建数据库 在MySQL中&#xff0c;创建一个名为spring的…

QT pro包含库文件目录符号含义

直接调用DLL需要三个文件&#xff0c;头文件(.h)、导入库文件(.lib)、动态链接库(.dll)&#xff0c; 注意&#xff1a;在qtCreaor中生成的动态库库文件文件为.a结尾&#xff0c;vs生成的动态链接库是.lib结尾 1、首先我们把 .h与.lib/.a 文件复制到程序当前目录下&#xff0c…

软设之白盒测试

白盒测试分为语句覆盖&#xff0c;判定覆盖&#xff0c;条件覆盖&#xff0c;判断/条件覆盖&#xff0c;条件组合覆盖&#xff0c;路径覆盖 语句覆盖 定义:被测试程序中的每条语句至少执行一次 特点:对执行逻辑覆盖很低&#xff0c;一般认为是很弱的逻辑组合。 判定覆盖: …

onnx基本概念

onnx基本概念 参考 文章目录 onnx基本概念Input, Output, Node, Initializer, AttributesSerialization with protobuf元数据List of available operators and domains支持的类型Opset版本Subgraphs, tests and loopsExtensibilityFunctionsShape (and Type) Inferencetools O…

编码在网络安全中的应用和原理

前言:现在的网站架构复杂&#xff0c;大多都有多个应用互相配合&#xff0c;不同应用之间往往需要数据交互&#xff0c;应用之间的编码不统一&#xff0c;编码自身的特性等都很有可能会被利用来绕过或配合一些策略&#xff0c;造成一些重大的漏洞。 什么是编码&#xff0c;为什…

UniVue更新日志:使用Carousel组件实现轮播图效果

github仓库 稳定版本仓库&#xff1a;https://github.com/Avalon712/UniVue 开发版本仓库&#xff1a;https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库&#xff1a;https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 今天的更…

YOLOv8改进 | 注意力机制 | 添加混合局部通道注意力——MLCA【原理讲解】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 注意力机制是计算机视觉中最广泛使用的组件之一,它可以帮助神经网络强调重要元素并抑制不相关的元素。然而,绝大多数的通道注意力机制只包含通道特征信息而忽略了空间特征信息,这导致了模型表征效果或对象检测…

吴恩达深度学习笔记:机器学习(ML)策略(1)(ML strategy(1))1.11-1.12

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第一周 机器学习&#xff08;ML&#xff09;策略&#xff08;1&#xff09;&#xff08;ML strategy&#xff08;1&#xff09;&#xff09;1.11 超过人的表现&#xff08;Surp…

报错:C1189#error: The <experimental/filesystem> header providing 解决方案

今天开发过程中&#xff0c;需要使用文件系统experimental/filesystem&#xff0c;报错C1189#error: The &#xff1c;experimental/filesystem&#xff1e; header providing &#xff0c;通过以下解决方案&#xff0c;成功运行程序。 目录 一、打开项目下的属性 二、选择C/…

算法02 递归算法及其相关问题【C++实现】

递归 在编程中&#xff0c;我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是&#xff1a;通常把一个大型的复杂问题&#xff0c;转变成一个与原问题类似的&#xff0c;规模更小的问题来进行求解。 递归的三大要素 函数的参数。在用递归解决问题时&…