C++:命名空间与输入输出
目录
前言
一、命名空间
1.1 namespace的价值
1.2 namespace的定义
1.3 命名空间的使用
二、C++输入&输出
前言
C++是一种面向对象的计算机程序设计语言,它扩展了C语言的功能,并引入了面向对象编程的概念,如类、继承和多态等,C++是以C语言为基础进行了拓展与创新,C++兼容C语言绝大多数的语法。
还记得我们在学C语言时的第一个代码程序吗?
#include<stdio.h>
int main()
{printf("hello world\n");return 0;
}
C++也兼容这种写法,但是C++有⼀套自己的输入输出,严格说C++版本的hello world应该是这样写的。
#include<iostream>
using namespace std;
int main()
{cout << "hello world\n" << endl;return 0;
}
现在还不认识不要紧,本篇会讲解C++的一些基础知识, 看完后就明白是怎么一回事了。
一、命名空间
1.1 namespace的价值
c语言项目类似下面程序这样的命名冲突是普遍存在的问题,C++引入namespace就是为了更好的解决这样的问题。
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{printf("%d\n", rand);return 0;
}

这里我们可以看到编译器报错了,因为在stdlib头文件中包含一个名为rand的函数与定义的变量rand发生了命名冲突。在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
1.2 namespace的定义
• 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员,命名空间中可以定义变量/函数/类型等。
• namespace本质是定义出⼀个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不再冲突了。
#include <stdio.h>
#include <stdlib.h>
// otto是命名空间的名字
namespace otto
{// 命名空间中可以定义变量/函数/类型 int rand = 10;//变量int Add(int left, int right)//函数{return left + right;}class otto//类{public:void man(){return;}private:int x;};}
int main()
{printf("%p\n", rand);printf("%d\n", otto::rand);return 0;
}
第一个printf默认访问的是全局的rand函数地址,第二个printf用到的是otto命名空间里的rand,这样就解决了命名冲突的问题。
• C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型声明或定义的逻辑,所有有了域隔离,命名冲突就解决了,局部域和全局域除了会影响 编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。
• namespace只能定义在全局,当然他还可以嵌套定义。
namespace otto
{namespace kun{int rand = 1;int Add(int left, int right){return left + right;}}
}
int main()
{printf("%d\n", otto::kun::rand);printf("%d\n", otto::kun::Add(1, 2));return 0;
}
• 项目工程中多文件中定义的同名namespace会认为是⼀个namespace,不会冲突。
• C++标准库都放在⼀个叫std(standard)的命名空间中。
1.3 命名空间的使用
编译查找⼀个变量的声明/定义时,默认只会在局部或者全局查找,不会到命名空间里面去查找,所以下面程序会编译报错,
namespace N
{int a = 0;int b = 1;
}
int main()
{printf("%d\n", a);return 0;
}

所以我们要使用命名空间中定义的变量/函数,有三种方式:
• 指定命名空间访问,项目中推荐这种方式。
int main()
{printf("%d\n", N::a);return 0;
}
通过“命名空间+::”的方式在指定命名空间访问。
• using将命名空间中某个成员展开,项目中经常访问的不存在冲突的成员推荐这种方式。
using N::b;
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;
}
展开后使用这个变量时就不用带命名空间了。
• 展开命名空间中全部成员,项目不推荐,冲突风险很大,日常小练习程序为了方便推荐使用。
using namespce N;
int main()
{printf("%d\n", a);printf("%d\n", b);return 0;
}
二、C++输入&输出
• <iostream>是Input Output Stream 的缩写,是标准的输入、输出流库,定义了标准的输入、输 出对象。
• std::cin是 istream 类的对象,它主要面向窄字符的标准输入流。
• std::cout 是 ostream 类的对象,它主要⾯向窄字符的标准输出流。
• std::endl 是⼀个函数,流插入输出时,相当于插入⼀个换行字符加刷新缓冲区。
• <<是流插入运算符,>>是流提取运算符。
• 使⽤C++输⼊输出更方便,不需要像printf/scanf输⼊输出时那样,需要手动指定格式,C++的输入输出可以自动识别变量类型,其实最重要的是 C++的流能更好的支持自定义类型对象的输入输出。
• IO流涉及类和对象,运算符重载、继承等很多面向对象的知识,这些知识我们还没有讲解,所以这里我们只能简单认识⼀下C++ IO流的用法,后面会有专门的⼀个章节来细节IO流库。
• cout/cin/endl等都属于C++标准库,C++标准库都放在⼀个叫std(standard)的命名空间中,所以要 通过命名空间的使用方式去用他们。
• ⼀般日常练习中我们可以using namespace std,实际项目开发中不建议使用
• 这里我们没有包含,也可以使用printf和scanf,在包含间接包含了。vs系列编译器是这样的,其他编译器可能会报错。
#include <iostream>
using namespace std;
int main()
{int a ;double b;char c ;// 可以自动识别变量的类型 cin >> a;cin >> b >> c;cout << a << endl;cout << b << " " << c << endl;return 0;
}

本篇内容就先到这里了,希望对各位有帮助,喜欢不要忘记三连,蟹蟹。

相关文章:
C++:命名空间与输入输出
目录 前言 一、命名空间 1.1 namespace的价值 1.2 namespace的定义 1.3 命名空间的使用 二、C输入&输出 前言 C是一种面向对象的计算机程序设计语言,它扩展了C语言的功能,并引入了面向对象编程的概念,如类、继承和多态等&a…...
Azure DevOps Server 数据库日志已满,TF30042: The database is full
Contents 1. 问题描述2. 处理方式 2.1 系统备份2.2 收缩日志2.3 恢复模式2.4 日志增长无法控制 1. 问题描述 Azure DevOps Server 作为微软的软件开发管理平台产品,理所当然地使用了微软的数据库软件SQL Server。 在一个大型的开发团队中,Azure DevOps S…...
[C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
//转为 bitmap方法一: Bitmap map OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat); process_pictureBox.Image map; //转为 bitmap方法二: Bitmap map new Bitmap(mat.ToMemoryStream()); process_pictureBox.Image map; //Image img 转为…...
【区块链+金融服务】基于区块链的供应链金融系统 | FISCO BCOS应用案例
传统供应链金融存在着信息不对称、信任问题和繁琐流程等弊端。为了解决这些问题,京北方搭建了基于区块链 的供应链金融系统,提供了更高效、透明、安全和可信的交易环境。 系 统 采 用 FISCO BCOS 为 底 层 链, 技 术 栈 使 用 Java 语 言 进…...
AI语言大模型商业价值深度解析
点击蓝字 关注我 随着人工智能(AI)技术的飞速发展,特别是深度学习算法的进步,AI语言大模型在自然语言处理领域的表现日益突出。国内外多种语言大模型如:OpenAi 的 ChatGpt,阿里通义千问,百度文心…...
理解DDD领域驱动设计思想
一、引言 在软件开发的广袤领域中,领域驱动设计(Domain-Driven Design,简称 DDD)犹如一颗璀璨的明星,备受瞩目。对于期望运用 DDD 开展项目的研发人员而言,明晰 DDD 的本质是实现其有效应用的基石。需注意…...
音频剪辑软件哪个好用?五大音频剪辑软件分享
如果你正打算在家自学视频制作,那么恭喜你,你已经踏上了一段充满魔法与惊喜的旅程!不过,别忘了,视频的灵魂不仅仅在于画面,更在于那直击心灵的音效。 想象一下,一个精心剪辑的片段,…...
12.2 使用prometheus-sdk向pushgateway打点
本节重点介绍 : 使用golang sdk打prometheus4种指标,推送到pushgateway gauge、counter、histogram、summary的初始化4种类似的设置值的方法推送到pushgateway的方法 prometheus配置采集pushgateway,grafana上配大盘 golang-sdk 项目地址 https://git…...
HTTPS 详解
HTTPS 是以安全为目标的 HTTP 通道,它在 HTTP 中加入 SSL 层以提高数据传输的安全性。HTTP 被用于在 Web 浏览器和网站服务器之间传递信息,但以明文形式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务…...
Microsoft Edge 使用方法与秘诀概览
目录 编辑引言 Microsoft Edge 功能与技巧概览 掌握这些设置技巧,让 Edge 浏览器的体验更干净 1. 使用阅读视图 2. 开启广告过滤 3. 管理扩展 4. 个性化新标签页 5. 使用网页截图 6. 清理浏览器缓存 7. 管理启动设置 8. 自定义地址栏建议 9. 使用内置笔…...
【视频】onvif、RTP、RTCP、SDP、RTSP、gb21818区别
ONVIF (Open Network Video Interface Forum): ONVIF是一个全球性的开放网络视频接口论坛,致力于发展基于IP网络的物联网设备的标准化。它提供了一个通用的标准接口,使不同厂商生产的网络视频产品能够互相兼容。 RTP (Real-time Transport Protocol): R…...
8-4 循环神经网络
对于 (8.4.2)中的函数 f f f,隐变量模型不是近似值。 毕竟 h t h_{t} ht是可以仅仅存储到目前为止观察到的所有数据, 然而这样的操作可能会使计算和存储的代价都变得昂贵。 回想一下,我们在前面讨论过的具有隐藏单元的隐藏层。 值得注意的…...
Linux系统编程 --- 多线程
线程:是进程内的一个执行分支,线程的执行粒度,要比进程要细。 一、线程的概念 1、Linux中线程该如何理解 地址空间就是进程的资源窗口。 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是࿱…...
Grafana中的rate与irate以及histogram
用法 rate rate函数用于计算一个时间序列在给定时间范围内的平均速率。它对每个数据点进行线性插值来计算速率,因此对于平滑和稳定的数据来说,rate是一个不错的选择。语法如下: rate(metric_name[time_range])metric_name: 指标名称。time…...
什么是网络安全态势感知
态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力,是以安全大数据为基础,从全局视角提升对安全威胁的发现识别、理解分析、响应处置能力的一种方式、最终是为了决策与行动,是安全能力的落地 态势感知的重要性 随着网络与信息技术的…...
php 在app中唤起微信app进行支付,并处理回调通知
<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {...
高效同步与处理:ADTF流服务在自动驾驶数采中的应用
目录 一、ADTF 流服务 1、流服务源(Streaming Source) 2、流服务汇(Streaming Sink) 二、数据链路 1、数据管道(Data Pipe) 2、子流(Substreams) 3、触发管道(Tri…...
【Arduino】ATmega328PB 连接 LSM6DS3 姿态传感器,并读数据(不确定 ESP 系列是否可行,但大概率是可行的)
总览 1.初始化 ATmega328PB,默认大家已经完成了 328 的配置准备工作,已经直接能够向里面写入程序 2.接线,然后验证 mega328 的 I2C 设备接口能否扫描到 LSM6DS3 3.编写代码,上传,查看串口数据。完成。 一、初始化 AT…...
live2d + edge-tts 优雅的实现数字人讲话 ~
震惊!live2d数字人竟开口说话 ~ 之前有想做数字人相关项目,查了一些方案。看了一些三方大厂的商用方案,口型有点尴尬,而且很多是采用视频流的方案,对流量的消耗很大。后来了解了live2d 技术,常在博客网页上…...
二进制安装php
下载php二进制包: 官网地址:https://www.php.net/releases/ PHP: Releaseshttps://www.php.net/releases/在里边可以选择自己要下载的包进行下载; 下载完成后进行解压: tar xvzf php-7.3.12.tar.gz 解压后 进入目录进行预编…...
MacOS开发环境配置:OpenClaw+GLM-4.7-Flash联调指南
MacOS开发环境配置:OpenClawGLM-4.7-Flash联调指南 1. 为什么选择这个组合? 去年我在做一个自动化文档处理项目时,发现市面上的AI工具要么隐私性不足,要么灵活性太差。直到偶然接触到OpenClaw这个开源框架,才找到了理…...
AutoGen多智能体框架实战指南:从环境搭建到业务落地
AutoGen多智能体框架实战指南:从环境搭建到业务落地 【免费下载链接】autogen 启用下一代大型语言模型应用 项目地址: https://gitcode.com/GitHub_Trending/au/autogen 在人工智能快速发展的今天,构建能够模拟人类协作模式的智能系统已成为技术突…...
简述双亲委派机制以及其优点
面试 概念:加载类的时候先交给自己的父类加载器执行,直到顶层的启动类加载器,如果父加载器能够完成加载,则交给父类加载器,否则自己尝试加载。 优点:保证类的加载的安全性,避免类的重复加载。...
[特殊字符]空间智能目标追踪系统:从“看视频”到“掌控空间”的技术跃迁——多模态识别 × 空间建模 × 轨迹预测,让视频系统具备“感知与决策能力”[特殊字符] 视频系统的终极形态,不是记录世
🚨空间智能目标追踪系统:从“看视频”到“掌控空间”的技术跃迁——多模态识别 空间建模 轨迹预测,让视频系统具备“感知与决策能力”💥 视频系统的终极形态,不是记录世界,而是理解世界。一、系统定位&am…...
从零开始手搓一个xv6内核页表:跟着MIT 6.S081源码一步步理解虚拟内存初始化
从零构建xv6内核页表:深入解析RISC-V虚拟内存初始化实战 在MIT 6.S081操作系统的学习过程中,xv6作为教学用精简内核,其虚拟内存实现是理解现代计算机内存管理的关键。本文将带您从第一行代码开始,完整复现xv6内核页表的构建过程&…...
从零上手Neo4j Desktop:CSV数据导入与核心Cypher操作指南
1. Neo4j Desktop环境准备与数据导入 第一次打开Neo4j Desktop时可能会被它的界面搞得有点懵,别担心,我刚开始用的时候也这样。这个工具把数据库管理、浏览器界面和插件都集成在了一起,特别适合新手快速上手。安装过程我就不赘述了࿰…...
AI巨头集体“铸Token”:从ChatGPT到“数字员工工厂”,程序员的狂欢还是危机?
想象一下:你早上醒来,打开电脑,不是自己敲代码,而是对着一只“龙虾”说:“帮我把昨天的Bug修了,顺便给老板发份周报。” 这不是科幻——2026年3月,这事儿正在发生。 全球头部科技公司突然集体“…...
告别bypy上传失败!用Aria2+百度云直链脚本,让服务器下载速度飙升5倍
告别bypy上传失败!用Aria2百度云直链脚本,让服务器下载速度飙升5倍 如果你经常需要将百度网盘中的大文件(比如几十GB的机器学习模型或数据集)传输到服务器上,一定对bypy的种种限制深有体会——速度慢、不稳定、大文件容…...
Wan2.2-I2V-A14B部署教程:系统盘50GB+数据盘40GB最小化配置实操
Wan2.2-I2V-A14B部署教程:系统盘50GB数据盘40GB最小化配置实操 1. 镜像概述与核心特性 Wan2.2-I2V-A14B是一款专为文生视频任务优化的私有部署镜像,特别针对RTX 4090D 24GB显存显卡进行了深度优化。这个镜像最大的特点是开箱即用,内置了完整…...
编译原理避坑指南:自顶向下语法分析的5个常见错误及解决方法
编译原理避坑指南:自顶向下语法分析的5个常见错误及解决方法 第一次接触自顶向下语法分析时,我盯着那个无限循环的递归文法整整三天没想明白——为什么明明按照教材步骤操作,程序却始终报错?直到助教指出我忽略了间接左递归的隐蔽…...
