C++命名空间(详解)

C++基础语法

C++基于C语言的改进:c++在C语言的基础上引入并扩充了面向对象的概念

C++基础概念C++是基于C语言而产生的,它即可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计

在1998年 出现C++98 C++成熟 他是标准第一个版本 引入了STL 标准模板库

C++总共63个关键字,其中包括C语言关键字32个


1.命名空间

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

这是C语言一个缺点:

例如:

//使用rand定义一个全局变量 没有问题 输出0
int rand = 0;int main()
{printf("%d ", rand);return 0;
}

如果引用头文件stdlib rand是个函数 导致命名冲突 编译失败

假如:日常你使用一个变量名称 你不知道他是库函数中的函数 那么会导致命名冲突

命名空间用来做名字隔离 防止命名冲突

如果没有命名空间 如果名字冲突了 整个项目上千个名字 改起来很麻烦

如果以后去公司 分组完成一个项目 单独写都没有问题 很多小组难免会命名冲突,我们该如何避免这种状况

如果是C语言的话 只能商量一下 两个人其中的一个人被迫修改名字

但是C++有方式解决方式,引入命名空间 新增关键字 namespace

命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名

普通的命名空间:

例如:

#include <iostream>
namespace zhr
{int a = 0;
}

namespace后面可以定义一个名字 这个名字就是域

命名空间定义的是命名空间域

命名空间域的变量生命周期是全局,但是它属于该命名空间域

C语言早早就接触过 同一个域不可以定义同一个变量 不同的域可以定义相同的变量

域会影响访问和生命周期

: :  域作用限定符 指定从域作用限定符左边的域去找 如果左边的域是空白 表示全局域 去全局域找

#include <stdio.h>
namespace bit
{int a = 2;
}
int a  = 1;
int main()
{int a = 0;printf("%d\n",a);//在局部范围找  输出结果是0printf("%d\n", bit::a);//指定命名空间域去找 输出结果是2//如果非要访问全局变量中的a呢?  printf("%d\n",::a);//域作用限定符;  输出结果是1return 0;
}

会输出局部变量的a 局部优先 就近原则 像访问局部 局部没有 再去全局变量中找

命名空间不只是可以定义变量 还可以定义函数 结构体

直接调用调用不到函数 命名空间是函数找的规则 默认在全局变量去找 默认不会在命名空间去找 必须指定才会去找

namespace bit
{int rand = 0;void func(){printf("func()\n");n }struct TreeNode{struct TreeNode* left;struct TreeNode* right;int val;};
}int main()
{func();//直接调用是调用不到的bit::func();//只需要在func前加bit::就可以调用到了struct TreeNode node;//这里也同理struct bit::TreeNode node;//但是这里命名空间要放在结构体名称前面return 0;
}

命名空间可以嵌套

#include <iostream>namespace hhh
{namespace zhr{int a = 10086;    }
}
int main()
{printf("%d\n",hhh::zhr::a);return 0;
}

3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中

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

不可以直接调用该命名空间里的变量和函数 需要使用:: 域作用限定符

命名空间的使用有三种方式:

1.加命名空间名称及作用域限定符:

using namespace std;
namespace N
{int a = 886;int b = 0;
}
int main()
{printf("%d\n", N::a);return 0;
}

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

using namespace std;
namespace N
{int a = 886;int b = 520;
}
using N::b;
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;
}

3.使用using namespace 命名空间名称引入

using namespace std;namespace N
{int a = 886;int b = 520;int c = 666;
}
using namespace N;using N::b;
int main()
{printf("%d\n", a);printf("%d\n", b);printf("%d\n", c);return 0;
}

使用命名空间的建议

1.项目中尽量不用using namespace std;

std是标准库的命名空间

2.日常练习用using namespace std;

3.项目中,指定命名空间访问+展开常用的

2.C++输入&输出

C++的第一个代码:hello World

知道了命名空间 这回知道了每次写C++代码前都要加

using namespace std;std是C++标准库的命名空间

如果直接展开std 会把库全部暴露出来 在项目中不适用

1.使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含< iostream >头文件以及std标准命名空间。

注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(vc 6.0)中还支格式,后续编译器已不支持,因此推荐使用+std的方式。

2. 使用C++输入输出更方便,不需增加数据格式控制,比如:整形--%d,字符--%c

#include <iosream>using namespace std;//std是C++标准库的命名空间
int main()
{int i, d;cin >> i >> d; //流提取cout << "Hello World" << endl;//  endl是换行 相当于'\n';cout << i << ' ' << d << endl;//这里的<<是流插入 自动识别类型cout << "hello world" << endl;  //这里相当于把一个char数组流插入到控制台     return 0;
}

个人水平不足 如果代码中有错误,可以多多在评论区指出,一定会及时修改!
谢谢大家看到这里 觉得有收获的话可以三连一下 一起加油!

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

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

相关文章

爱普生差分晶振在光模块中的重要角色

光模块是现代通信设备中的重要组成部分&#xff0c;主要用于实现光电转换和信号传输&#xff0c;它是一种将光信号转换为电信号&#xff0c;或者将电信号转换为光信号的设备。在光纤通信中&#xff0c;光模块扮演着至关重要的角色。 光模块的主要组成部分包括光源、光接收器、…

OSPF学习笔记(状态机)

1、邻居关系 OSPF设备启动后&#xff0c;会通过OSPF接口向外发送Hello报文&#xff0c;收到Hello报文的OSPF设备会检查报文中所定义的参数&#xff0c;如果双方一致就会形成邻居关系&#xff0c;两端设备互为邻居 2、邻接关系 形成邻居关系后&#xff0c;如果两端设备成功交…

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…

C# :IQueryable IEnumerable

文章目录 1. IEnumerable2. IQueryable3. LINQ to SQL4. IEnumerable & IQueryable4.1 Expression4.2 Provider 1. IEnumerable namespace System.Collections: public interface IEnumerable {public IEnumerator GetEnumerator (); }public interface IEnumerator {pubi…

气泡式水位计施工技术要求

1、气泡式水位计压力气管出气口应安装并固定在最低水位处&#xff0c;其压力气管也应固定&#xff0c;有条件的可用金属管或塑料管保护。气泡式水位计安装示意图见附图。 2、安装要求 1&#xff09;检查气泡式水位计气管外观有无破损及变形&#xff1b; 2&#xff09;旋开带有…

特征工程技巧—Bert

前段时间在参加比赛&#xff0c;发现有一些比赛上公开的代码&#xff0c;其中的数据预处理步骤值得我们参考。 平常我们见到的都是数据预处理&#xff0c;现在我们来讲一下特征工程跟数据预处理的区别。 数据预处理是指对原始数据进行清洗、转换、缩放等操作&#xff0c;以便为…

Blackwell未来发展之路究竟如何?

英伟达Blackwell如何重塑AI计算的未来&#xff1f; 前言 台湾大学演讲 就在6月2日&#xff0c;英伟达CEO黄仁勋在中国台湾大学综合体育馆发表了最新的演讲。这次黄仁勋的演讲依旧重磅&#xff0c;更值得注意的是这次演讲中还透露了Blackwell今后的发展之路。 介绍Blackwell 介绍…

MongoDB CRUD操作:地理位置查询

MongoDB CRUD操作&#xff1a;地理位置查询 文章目录 MongoDB CRUD操作&#xff1a;地理位置查询地理空间数据GeoJSON对象传统坐标对通过数组指定&#xff08;首选&#xff09;通过嵌入文档指定 地理空间索引2dsphere2d 地理空间查询地理空间查询运算符地理空间聚合阶段 地理空…

拿笔记下来!产品采购制造类合同怎样写比较稳妥?

拿笔记下来&#xff01;产品采购制造类合同怎样写比较稳妥&#xff1f; 近日&#xff0c;几经波折&#xff0c;泰中两国终于完成了潜艇采购谈判&#xff01;你知道吗&#xff1f;产品制造类合同或协议在起草前如果没有充分考虑各种因素&#xff0c;可能会导致一系列问题和不利…

C语言学习:数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址&#xff08;类似门牌号&#xff09; • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

无人监控视频输出卡顿状态

设计思路&#xff0c;如下&#xff1a; 1.通过采集卡将视频信号输出到个人PC中 2.PC按设置好的时间&#xff0c;视频属性分片保存 3.将步骤2中的视频&#xff0c;按预处理要求&#xff0c;得到待计算的视频片段 4.使用SSIM算法计算预处理后的视频&#xff0c;将计算得到的数据存…

聊天机器人的实践过程

一、语聊机器人 OpenAI 的爆火&#xff0c;到如今也才一年多的时间&#xff0c;然而在过去的一年中&#xff0c;生成式AI的落地场景几乎 80%都是 ChatBot 的形式&#xff0c;那么今天这篇文章我们就来聊一下&#xff0c;生成式AI和IM能擦出怎么样的火花&#xff1f;以及各种场…

p13idea的其他操作

1 导入模块 错误示范&#xff1a; 正确示范&#xff1a; 2 删除模块 必须用delete才能删除干净&#xff0c;用remove删了之后还要回到文件里面把它删除掉

有钱还系统源码 人人还众筹还钱模式还贷系统源码

盈利模式&#xff1a; 1.系统里直推400 2.间推得200 3.升级是隔代匹配200 4.漏单直接设置归系统 5.九级匹配不到直接归平台 有钱还平台新注册会员&#xff0c;即新入的负债者要分9次分别资助先来的11名负债者每人200元&#xff0c;这笔资助不是一次性给到对方&#xff0c…

Mybatis的一级缓存

缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。 Mybatis和Hibernate一样&#xff0c;也有一级和二级缓存&#xff0c;同样默认开启的只有一级缓存&#xff0c;二级缓…

脑部磁共振成像肿瘤分割方法(MATLAB 2018)

近年脑肿瘤发病率呈上升趋势&#xff0c;约占全身肿瘤的5%&#xff0c;占儿童肿瘤的70%。CT、MRI等多种影像检查方法可用于检测脑肿瘤&#xff0c;其中MRI应用于脑肿瘤成像效果最佳。精准的脑肿瘤分割是病情诊断、手术规划及后期治疗的必备条件&#xff0c;既往研究者对脑部肿瘤…

Python知识点12---Python的I/O操作

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python的流(I/O)操作&#xff0c;最简单的其实就是输入和输出&#x…

工厂的精益生产如此重要

什么是工厂的精益生产 精益生产&#xff08;Lean Manufacturing&#xff09;是一种起源于20世纪50年代日本丰田汽车公司的生产管理哲学。它的核心理念是通过消除生产过程中的浪费&#xff0c;优化流程&#xff0c;提高效率&#xff0c;从而实现成本降低和质量提升。精益生产不仅…

VRTK4.0学习——(二)

手柄绑定以及显示 1.导入CameraRigs.UnityXRPluginFramework 和 CameraRigs.TrackedAlias 预设&#xff0c;将CameraRigs.UnityXRPluginFramework拖入CameraRigs.TrackedAlias的Elements中即可&#xff0c;运行软件后即可看到手柄了 注&#xff1a;如果无法看到手柄&#xff…

MySQL:MySQL执行一条SQL查询语句的执行过程

当多个客户端同时连接到MySQL,用SQL语句去增删改查数据,针对查询场景,MySQL要保证尽可能快地返回客户端结果。 了解了这些需求场景,我们可能会对MySQL进行如下设计: 其中,连接器管理客户端的连接,负责管理连接、认证鉴权等;查询缓存则是为了加速查询,命中则直接返回结…