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

embedded/2024/10/18 22:34:20/

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

#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-

 

 


http://www.ppmy.cn/embedded/38140.html

相关文章

外企接受大龄程序员吗?

本人知乎账号同公众号&#xff1a;老胡聊Java&#xff0c;欢迎留言并咨询 亲身体会外企经历所见所闻&#xff0c;外企能接受大龄程序员。 1 大概是10年的时候&#xff0c;进一家知名外企&#xff0c;和我一起进的一位manager&#xff0c;后来听下来&#xff0c;年龄35&#xf…

使用 XTuner 完成llama3小助手认知微调

1.首先请报名课程&#xff1a; 2.环境配置 conda create -n llama3 python3.10 conda activate llama3 conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda12.1 -c pytorch -c nvidia 2.1 下载模型 新建文件夹 mkdir -p ~/model cd ~/model 从Op…

linux内核源码分析--核心网络文件和目录

图3-2显示了在/proc/sys中由网络代码所使用的主要目录&#xff0c;就每个目录而言&#xff0c;都列出了在哪一章描述其文件。 proc/sys/net bridge ipv4 core route neigh conf 图3-2/proc/sys/net 中的核心目录 根据前借所述&#xff0c;我们来看net中的树根是如何定义的&…

树莓派4b测量PM2.5

1.GP2Y1010AU0F粉尘传感器连接图 2. GP2Y1010AU0F工作原理 工作原理 传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。 3.源代码 main.py # coding=UTF-8 import RPi.GPIO as GPIO from ADC import ADS1015…

XORM 框架的使用

1、xorm 1.1、xorm 简介 xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 特性 支持 struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit,…

旧衣回收小程序开发:线上回收模式成为行业发展趋势

当下人们生活水平在不断提高&#xff0c;对衣服的要求也在增加&#xff0c;更新速度越来越快&#xff0c;闲置下来的旧衣服也在增加&#xff0c;为了减少浪费&#xff0c;旧衣回收行业受到了大众的关注。旧衣回收对我国资源回收、环境保护具有非常大的意义。 在互联网时代下&a…

python中flask使用简要记录

文档层级概要 一、flask简要说明 二、uwsgi配置说明 三、启动 四、结果验证 之前有做过接口&#xff0c;后来写了许多算法和数据处理&#xff0c;对于接口大多时候是通过fastapi或调别人的接口。自己写的接口倒是没有多少。在这里使用uwsgi和flask及nginx进行配置&#xf…

泛微E9开发 选择项目类型,自动带出该类项目的预计金额(即下拉框联动浮点型数据)

1、功能背景 在用户进行项目类型选择时&#xff0c;自动带出其余的标准数据&#xff08;样例中的预计金额&#xff09;&#xff0c;如对员工进行表彰奖励时&#xff0c;不同的表彰有不同的奖励金额&#xff0c;那么我们就可以使用以下的方式来进行操作。 2、展示效果 3、实现…