【C++】命名空间和IO流

一切都从这个代码开始!!! 

#include<iostream>

using namespace std;

int main()
{
	cout << "Hello world!" << endl;
	return 0;
}

命名空间

当我们写了这么一段代码的时候...

c9150929dc0c4d8d9944d8fb7e9a6b73.png

Ctrl F5运行,发现报错了....

58c8c2e85f154aa29a1e7923aa079f76.png

这是因为在stdlib库里有一个rand函数,而我们又好巧不巧的在全局定义一个变量rand,这就让编译器有点不知所措,于是报错。

命名冲突的问题不仅发生在我们写的代码和库里的冲突,也包括在写项目时,两个程序员使用的名称冲突。所以

C++为了解决这样的问题,提出了"命名空间"这个概念。

1.使用

#include<stdio.h>
namespace whh
{
	int num = 3;
}

int main()
{
	printf("%d\n", whh::num);
}

上面的代码就表示在“whh”这块命名空间里定义了一个变量num。

域作用限定符::

但是在函数体中使用的时候可以注意到和C语言不同的地方有多加了一个whh :: num,其中::就被称为域作用限定符,他表示的是这里使用的是whh这个命名空间里的num。

如果不指定默认访问全局函数,没有就会报错,如果通过域作用限定符指定了就访问该命名空间中的,没有同样也会报错。

注意:

1.命名可以定义变量,函数,结构体...

2.命名空间也可以嵌套。

#include<stdio.h>
namespace whh
{
	int num = 3;

	int  Add(int x, int y)
	{
		return x + y;
	}

	struct Node
	{
		struct Node* next;
		int val;
	};

	namespace whh2
	{
		int big = 9;
	}
}

int main()
{
	//使用变量
	printf("%d\n", whh::num);
	//使用函数
	int a = 2, b = 3;
	int c = whh::Add(a, b);
	//使用结构体
	struct whh::Node node;	//注意whh::的位置在struct之后Node之前
	//嵌套
	int small = whh::whh2::big;
}

3.如果函数定义和声明分离,可以各封各的,命名空间的名称不会冲突 ,同个项目下相同名称的命名空间会自动合并。

2.展开命名空间

但是在确定不会有命名冲突的情况下,每次指定命名空间很繁琐,可以通过展开命名空间来解决。

直接在头文件下添加using namespace xxx;即可。

using namespace wjw;

这样不用每次使用时都指定命名空间了。

C++官方库里也有很多我们经常使用的函数、变量等,可以通过↓展开。

using namespace std;

C++官方库的命名空间平时练习可以直接展开,但是写工程项目时不要直接都展开。

如果所有命名空间都展开了,先找全局,再按展开顺序挨个找,找到为止。


iostream IO流

以上解决了为什么开头Hello world的代码为什么要加上using namespace std;

至于是什么地方使用到std库里的东西了呢,答案是cout

<< 流插入

在C++中<<是个运算符,叫作流插入,和cout 一起就相当于C语言中的printf,不过cout可以自动识别输出变量的类型,不需要格式化输出,可以连续输出。

int a = 0;
double b = 8.9;
char c = 'a';
cout << a << b << c;

c就是console(控制台)的缩写。

如果不展开std库,想要在屏幕上输出“Hello world!”就需要指定命名空间

std::cout << "Hello world!";

C++中的换行

  1. 字符串后加\n  “XXXXX\n”
  2. 打印换行字符串 cout << xxx << "\n";
  3. 打印换行字符 cout << xxx << '\n';
  4. 使用换行关键字 cout << xxx << endl;

不过endl也是库里的,如果不展开std就需要在前面指定std::endl

问题在于,又不能直接展开std,又有这么多地方需要,这..........好吧,所以,可以

指定展开

using std::cout;
using std::endl;

这样就都解决了。

>> 流提取

printf讲了,scanf不讲就不礼貌了。它对应的是cin

不过其实用法也大差不差。

int a = 0;
double b = 0;
char c = 0;
cin >> a >> b >> c;

输入之后就可以给它们赋值了。

头文件

cout和cin使用时要包含头文件。

#include<iostream>

一般这个头文件后面是不需要.h的,然后很基础的C++也只需要包含这个头文件,不需要#include<stdio.h>,不过如果你想的话也是可以的,因为C++兼容C

那么至此,前面所写的代码一切都说得通了。


-The End-

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++算法题 - 二叉树层次遍历

目录 199. 二叉树的右视图637. 二叉树的层平均值102. 二叉树的层序遍历103. 二叉树的锯齿形层序遍历 199. 二叉树的右视图 LeetCode_link 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节…

一文搞懂前端跨页面通信的那些方案们

前端开发逃避不开跨页面通信这项工作&#xff0c;跨页面通信&#xff0c;就好比A页面要和B页面说话&#xff0c;可能只是说一句话&#xff0c;不需要回话&#xff0c;可能是要给一些东西&#xff0c;希望得到回复&#xff0c;并频繁进行沟通&#xff0c;接下来我们说说这些跨页…

HKT x Microsoft 365 Copilot 助力企业提升工作效率

人工智能&#xff08;AI&#xff09;在工作场所的应用和整合日益增多&#xff0c;更成为塑造未来工作模式的革新趋势之一。AI不仅简化和改进了许多任务和流程&#xff0c;还为协作、沟通和创新开辟了新的机遇。不久前&#xff0c;微软新推出AI驱动的生成式生产力工具— Microso…

【Elasticsearch运维系列】Elasticsearch7.12.1启动指定版本JDK:你学废了吗?

一、背景 一套生ES集群&#xff0c;版本为7.12.1&#xff0c;近期频繁告警&#xff0c;频繁出现索引分片异常&#xff0c;索引状态异常&#xff0c;导致应用无法正常写入ES&#xff0c;另外&#xff0c;也经常出现节点掉问题。通过分析相关ES日志&#xff0c;显示和当前JAVA G…

【LAMMPS学习】八、基础知识(5.8)LAMMPS 中热化 Drude 振荡器教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

DDD架构学习

文章目录 领域建模事件风暴四色建模法 DDD名称解析领域子域核心域通用域支撑域限界上下文战术设计实体值对象聚合和聚合根工厂资源库领域服务领域事件 DDD代码的分层名词解析实体值对象聚合根领域服务领域事件 VO&DTO&DO&PO博客 领域建模 领域驱动设计的核心在于领…

【设计模式】——专栏概述

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

智慧校园与学生成长

当时间追溯到2018年&#xff0c;技术的前进已经逾越了人们的幻想&#xff0c;很多先进的设备也投入到了大众的日子中去&#xff0c;为信息化的推进带来了全新的改动。与此同时&#xff0c;校园也不甘落后&#xff0c;将教育与信息化得到一个完美的融合&#xff0c;为学生的未来…

想要买到心仪的旋转式孔板流量计吗?

选择旋转式孔板流量计可不能云里雾里的乱选择呀&#xff0c;煤矿对产品质量要求很严格的。所以我们要先了解产品的再决定才是对的选择。 旋转式孔板流量计技术参数【1--5--9】 规格&#xff1a;DN15&#xff5e;DN1000 孔径比(βd/D)&#xff1a;β0&#xff0e;2—0&#xff…

Web前端三大主流框架是什么?

Web前端开发领域的三大主流框架分别是Angular、React和Vue.js。它们在Web开发领域中占据着重要的地位&#xff0c;各自拥有独特的特点和优势。 Angular Angular是一个由Google开发的前端框架&#xff0c;最初版本称为AngularJS&#xff0c;后来升级为Angular。它是一个完整的…

MySQL迁移data目录

MYSQL数据库有时候安装好了&#xff0c;想移动一下data目录&#xff0c;但是又不想重新安装一下&#xff0c;就只能想办法把这个目录迁移一下。 先找到my.ini配置文件&#xff0c;可以全局搜索一下&#xff0c; 找到之后&#xff0c;把这个地方修改一下&#xff0c;就把data目…

IP协议全解析:网络层通信的基石

⭐小白苦学IT的博客主页⭐ ⭐初学者必看&#xff1a;Linux操作系统入门⭐ ⭐代码仓库&#xff1a;Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在数字化时代的浪潮中&#xff0c;网络通信无处不在&#xff0c;它连接着世界的每一个角落&#xff0c;承载着信息的高…

评估Transitions

Stateflow使用图表中的转换从一种OR状态移动到另一种OR状态。对于图表执行的输入和执行工作流,Stateflow评估转换以确定它们是否有效。有效转换是条件标签为true且路径以状态结束的转换。如果转换有效,则Stateflow将从源状态退出并进入目标状态。 评估Transitions的工作流 T…

Java八股文3

3.垃圾回收 1.对象什么时候可以被垃圾器回收 1.垃圾回收的概念 为了让程序员更专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以&#xff0c; 在Java语言中&#xff0c;有了自动的垃圾回收机制&#xff0c;也就是我们熟悉的GC(Garbage Collection)…

代码随想录算法训练营第四十二天| 01背包问题理论基础,416. 分割等和子集

理论基础&#xff1a; 带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili很多同学对背包问题的理解程度都处于一种黑盒的状态&#xff0c;及时这道题目在力…

WebDAV之π-Disk派盘 + 溯记

“溯记”是一款提供丰富功能的时间轴日记应用,旨在帮助用户记录生活中的碎片化想法和事件,并提供便捷的回顾和管理功能。根据您提供的描述,这款应用具有丰富的特性,包括时间轴浏览、多媒体支持、实时存储、模糊搜索、日历视图、故事关联和随机回溯。这些功能将帮助用户记录…

C++奇迹之旅:string类对象的容量操作

文章目录 &#x1f4dd; string类的常用接口&#x1f309; string类对象的容量操作&#x1f320;size&#x1f320;length&#x1f320;capacity&#x1f320;clear&#x1f320;empty&#x1f320;reserve&#x1f309;resize &#x1f6a9;总结 &#x1f4dd; string类的常用…

vue导出大量数据的表格方法

我目前的项目导出4万7数据没问题 先安装 npm install -S file-saver npm install xlsx0.16.0 -S npm install -D script-loader 我使用的版本是"file-saver": “^2.0.5”, “xlsx”: “^0.16.0” 新建Export2Excel.js //Export2Excel.js /* eslint-disable */ requ…

直播产品实习生实习报告,笔灵AI生成模版分享

实习体验报告&#xff1a;直播产品实习生 如果有不同的岗位需要写的话可以去笔灵生成一下 网址&#xff1a;https://ibiling.cn/scene/inex?fromcsdnsx 一、实习背景我是XXX&#xff0c;作为一名直播产品实习生&#xff0c;我在XX公司进行了为期X个月的实习。在这段时间里&…

bfs之八数码

文章目录 八数码解题思路图解举例算法思路 代码CPP代码Java代码 八数码 在一个 33的网格中&#xff0c;1∼8这 8个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一…