C++命名空间知识点总结

news2024/10/5 19:09:22

引入

在 C++ 应用程序中。可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断所使用的是哪一个 xyz() 函数。

因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

,

命名空间

定义

命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:

namespace namespace_name {
// 代码声明
}

调用

为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,指定所使用的函数或变量时需要用到“::”操作符,“::”操作符是域解析操作符。如下所示:

name::code;  // code 可以是变量或函数 

实例

#include<iostream>
using namespace std;

namespace myName
{
    int x=5;
}

int main()
{
    int x=1;
    cout<<x<<endl;
    cout<<myName::x<<endl;
    return 0;
}

输出结果为:

1

5

using指令

除了直接使用域解析操作符::,还可以采用using声明(using declaration)

例1(常用)

可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

#include <iostream>
using namespace std;
 
// 第一个命名空间
namespace first_space{
   int a;
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   int a;
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{
 
   // 调用第一个命名空间中的函数
   func();
   
   return 0;
} 

当上面的代码被编译和执行时,它会产生下列结果:

Inside first_space 

例2

using 指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 first_space 命名空间中的变量a,您可以使用如下的语句:

using first_space::a; 

随后的代码中,在使用first_space命名空间的变量a时就可以不用加上命名空间名称作为前缀,但是first_space命名空间中的其他项目仍然需要加上命名空间名称作为前缀。

总结

C++ 标准的命名空间为 std ,包含很多标准的定义。头文件iostream文件中定义的所有变量、函数等都位于std命名空间中,每次使用iostream中的变量或函数都需要在前面加上std::是非常麻烦的一件事,为此可直接用using声明将std中的所有变量或函数等都声明出来。 如果不用using namespace std;这一语句,则程序应该像下面这样:

#include<iostream>
int main(){
    std::cout<<"hello world!"<<std::endl;
    return 0;
} 

使用using namespace std;这一语句后,则程序应该像下面这样:

#include<iostream>
using namespace std;
int main(){
    cout<<"hello world!"<<endl;
    return 0;
} 

命名空间的嵌套

命名空间可以嵌套,可以在一个命名空间中定义另一个命名空间,如下所示:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
} 

可以通过使用 :: 运算符来访问嵌套的命名空间中的成员:

// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
 
// 访问 namespace_name1 中的成员
using namespace namespace_name1; 
// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
 
// 访问 namespace_name1 中的成员
using namespace namespace_name1; 

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

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

相关文章

LibreOJ - 2874 历史研究 (回滚莫队)

回滚莫队就是在基础莫队的前提下&#xff0c;用更多的增加操作代替了减操作。 分成两种情况 1、一个询问的整个区间都在一个块儿里&#xff1b;这种情况直接暴力求即可&#xff0c;因为在一个块儿里&#xff0c;时间复杂度不会高。 2、一个询问的整个区间不在一个块儿里&#…

【Shell脚本6】Shell 运算符

Shell 基本运算符 Shell 和其他编程语言一样&#xff0c;支持多种运算符&#xff0c;包括&#xff1a; 算术运算符关系运算符布尔运算符逻辑运算符字符串运算符文件测试运算符 原生bash不支持简单的数学运算&#xff0c;但是可以通过其他命令来实现&#xff0c;例如 awk 和 …

轻量封装WebGPU渲染系统示例<21>- 3D呈现元胞自动机之生命游戏(源码)

实现原理: 基本PBR光照与gpu compute计算 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifeSpherePBR.ts当前示例运行效果: 其他效果截图: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如…

使用Ruby编写通用爬虫程序

目录 一、引言 二、环境准备 三、爬虫程序设计 1. 抓取网页内容 2. 解析HTML内容 3. 提取特定信息 4. 数据存储 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法&#xff0c;遍历网页并提取所需的信息。使用Rub…

Leetcode刷题详解——子集

1. 题目链接&#xff1a;78. 子集 2. 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;数组中的元素 互不相同 。返回该数组所有可能的子集&#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1&#xff1a; 输入&#xf…

Mactracker for mac(硬件信息查询工具)免费下载

想知道你电脑的信息吗&#xff1f;Mactracker Mac版是Macos上一款硬件信息查询工具&#xff0c;可以查询电脑中的硬件信息&#xff0c;还可以查看您使用软件的具体情况&#xff0c;苹果电脑产品和周边产品的信息&#xff0c;售价等等&#xff0c;让您对电脑有更多深刻的了解。 …

【C++】开源:rapidjson数据解析库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍rapidjson数据解析库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

求职招聘小程序源码系统+社交招聘+多城市招聘 带完整搭建教程

大家好&#xff0c;今天罗峰来给大家分享一款求职招聘小程序源码系统。目前&#xff0c;求职招聘市场在不断变革。传统的招聘网站已经无法满足人们对于高效、便捷、多元化的招聘需求。该系统集求职招聘、社交招聘、多城市招聘等功能于一体&#xff0c;旨在为用户提供更加便捷、…

京东商品详情API,页面信息采集,优惠券信息获取

京东开放平台提供了API接口来访问京东商品详情。通过这个接口&#xff0c;您可以获取到商品的详细信息&#xff0c;如商品名称、价格、库存量、描述等。额外还附加一个优惠券信息接口。代码如下: 京东获得JD商品详情 API 优惠券接口 公共参数 名称类型必须描述keyString是调…

【I/O流之旅】File类-零基础入门指南

&#x1f38a;专栏【Java】 &#x1f33a;每日一句:看不清楚未来时,就比别人坚持久一点 ⭐欢迎并且感谢大家指出我的问题 目录 1.File概述 2.File构造方法 (1).根据文件路径创建文件对象 (2).根据父路径名字符串和子路径名字符串创建对象 (3).根据父路径对应文件对象和子路…

Python基础入门(3)----Python基础语法:解释器、标识符、关键字、缩进

文章目录 Python解释器标识符关键字缩进代码示例与运行结果Python是一种高级编程语言,以其简洁明了的语法和强大的功能而受到广泛欢迎。本文将介绍Python的一些基础语法元素,包括解释器、标识符、关键字和缩进,并提供相应的代码示例和运行结果。 Python解释器 Python是一种…

登陆认证权限控制(2)—— 基于Spring security 安全框架的权限管理 注解式权限控制 RABC模型

前言 登陆认证&#xff0c;权限控制是一个系统必不可少的部分&#xff0c;一个开放访问的系统能否在上线后稳定持续运行其实很大程度上取决于登陆认证和权限控制措施是否到位&#xff0c;不然可能系统刚刚上线就会夭折。 Spring Security 是一个能够为基于 Spring 的企业应用…

vue2 集成 - 超图 - SuperMap iClient3D for WebGL 及常用方法

1:下载SuperMap iClient3D for WebGL SuperMap iClient3D for WebGL产品包 打开资源目录如下 2:格式化项目中所用的依赖包 开发指南 从超图官网下载SuperMap iClient3D 11i (2023) SP1 for WebGL_CN.zip解压后,将Build目录下的SuperMap3D复制到项目中 \public\static…

iOS Crash 治理:淘宝VisionKitCore 问题修复

本文通过逆向系统&#xff0c;阅读汇编指令&#xff0c;逐步找到源码&#xff0c;定位到了 iOS 16.0.<iOS 16.2 WKWebView 的系统bug 。同时苹果已经在新版本修复了 Bug&#xff0c;对于巨大的存量用户&#xff0c;仍旧会造成日均 Crash pv 1200 uv 1000&#xff0c; 最终通…

SpringCloud——三个服务注册中心的异同点

首先我们说一下什么是CAP&#xff1a; C&#xff1a;Consistency(强一致性) A&#xff1a;Availability(高可用性) P&#xff1a;Partition tolerance(分区容错性) CAP关注的粒度是数据&#xff01; AP(Eureka) CP(Zookeeper/Consul)

【Database System Concept 7th】Chapter 24 Advanced Indexing Techniques 读书笔记

Chapter 24 Advanced Indexing Techniques 24.5 Hash Indices24.5.1 Static Hashing24.5.2 Dynamic Hashing24.5.2.1 Data Structure24.5.2.2 Queries and Updates 24.5 Hash Indices 24.5.1 Static Hashing 这一部分就不介绍了&#xff0c;在14.5中已经介绍过了。 24.5.2 D…

攻击者滥用日历服务作为 C2 基础设施

谷歌警告多个威胁参与者正在利用其日历服务作为命令和控制&#xff08;C2&#xff09;基础设施。 谷歌警告 称&#xff0c;多个威胁参与者共享一个名为“Google Calendar RAT”的公共概念验证&#xff08;PoC&#xff09;漏洞&#xff0c;该漏洞依赖日历服务来托管命令和控制&…

SpringCloud——消息驱动——Stream

1.什么是消息驱动 消息驱动就是屏蔽底层消息中间件的差异&#xff0c;降低切换成本&#xff0c;统一消息的编程模型。目前仅支持RabbitMQ、Kafka。 2.消息中间件有什么问题&#xff0c;stream靠什么实现&#xff1f; 如果我们项目用到了RabbitMQ和Kafka&#xff0c;由于这两个…

大数据毕业设计选题推荐-超级英雄运营数据监控平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

torch.cuda.is_available()=false的原因

1、检查是否为nvidia显卡&#xff1b; 2、检查GPU是否支持cuda; 3、命令行cmd输入nvidia-smi&#xff08;中间没有空格&#xff09;&#xff0c;查看显卡信息&#xff0c;cuda9.2版本只支持Driver Version>396.26&#xff1b;如果小于这个值&#xff0c;那么你就需要更新显…