1. C++入门:命名空间及输入输出
C++相比C的变化
- 兼容C
- 面向对象
- 泛型
- C的不足的弥补
为什么要有命名空间
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的
#include <stdio.h>
#include <stdlib.h>int rand = 0;int main()
{printf("hello world\n");printf("%d\n", rand);return 0;
}
如果有这样一段代码,当不包含stdlib头文件的时候,可以正常运行
但是包含上之后,会显示
![![[Pasted image 20240508142432.png|755]]](https://img-blog.csdnimg.cn/direct/e98eeb145a4345a2ac4c4f7a14afc21f.png)
命名冲突:全局变量rand和库里面的函数rand冲突了
C的一大缺陷是无法解决命名冲突的问题
场景:
- 定义的名字跟库冲突
- 程序员互相之间会冲突
命名空间的定义
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
1. 正常定义一个命名空间
#include <stdio.h>
#include <stdlib.h>namespace cho
{int rand = 0;
}int main()
{printf("hello world\n");printf("%d\n", rand);return 0;
}
这样就可以编译通过
用一堵围墙将定义的全局变量rand围起来,默认不会到墙里面去找
访问rand的时候,默认访问是没有被围起来的rand
会有一个警告
![![[Pasted image 20240508143814.png|811]]](https://img-blog.csdnimg.cn/direct/72e7031e1832496082ff06e9f7768d32.png)
因为全局的rand是一个函数名,也就是一个函数指针
![![[Pasted image 20240508143918.png]]](https://img-blog.csdnimg.cn/direct/d51abc9c2a2d40368db70998f5037a91.png)
使用%p打印解决问题,打印的就是rand函数的地址
2. 嵌套定义命名空间
如果命名空间里自己定义的名字和自己冲突了
#include <stdio.h>
#include <stdlib.h>namespace cho
{namespace cho1{int rand = 0;}namespace cho2{int Add(int left, int right){return left + right;}}struct Node{struct Node* next;int val;};
}
访问的时候也是嵌套访问
int main()
{printf("hello world\n");printf("%d\n", cho::cho1::rand);cho::cho2::Add(1, 2);struct bit::Node node;return 0;
}
命名空间的使用
1. 指定命名空间访问变量
::域作用限定符
#include <stdio.h>
#include <stdlib.h>namespace cho
{int rand = 0;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};
}int main()
{printf("hello world\n");printf("%d\n", cho::rand);cho::Add(1, 2);struct bit::Node node;return 0;
}
cho::rand:表示访问的是命名空间里的那一个rand,可以访问cho这个命名空间域
函数和结构体同理
2. 展开命名空间访问变量
自己做测试的时候,每次访问变量都要指定命名空间,很麻烦
#include <Stack.h>using namespace cho;using namespace std;int main()
{ST s;StackInit(&s);StackPush(&s, 1);return 0;
}
展开命名空间,把墙拆了
默认也会在cho这个命名空间搜索
展开了一般就不指定了
using namespace std;
展开std命名空间,std是C++官方库定义的命名空间
C++库里面的东西都在std命名空间里面
在工程项目里面不要这样展开,容易冲突
日常练习,为了方便可以展开
展开了多个命名空间,编译器哪个命名空间都会进
会先去全局里面找ST,全局没有会挨着去找,cho里面找到了就不会再找了
cho没有找到会去std里面去找
如果都没有找到会报错
3. 指定展开命名空间访问变量
每次指定命名空间很不方便
直接展开,全部暴露,又有冲突危险
using std::cout;
using std::endl;int main()
{cout << "hello world\n";int a = 10;double b = 11.11;cout << a << endl;cout << b << endl;cout << a << endl << b << endl;return 0;
}
命名空间实际应用
栈
#pragma once
include <stdio.h>namaspace cho
{typedef struct Stack{int* a;int top;int capacity;}ST;void StackInit (ST* ps);void StackPush (ST* ps, int x);
}
#include "Stack.h"namespace cho
{void StackInit (ST* ps){ps->a = NULL;ps->top = 0;ps->capacity = 0;}void StackPush(ST* ps, int x){//...}
}
多个文件的多个位置的同一个命名空间,编译器会把它们合并成一个
#include <Stack.h>int main()
{cho::ST s;cho::StackInit(&s);cho::StackPush(&s, 1);return 0;
}
IO流的基本使用
#include <iostream>int main()
{std::cout << "hello world\n";int a = 10;double b = 11.11;std::cout << a << "\n";std::cout << b << "\n";std::cout << a << "\n" << b << "\n";return 0;
}
<<:流插入运算符
cout在std命名空间里,只有指定了命名空间才可以使用
c - console 暂时理解为控制台/终端
cout可以自动识别输出变量的类型
![![[Pasted image 20240508162156.png|191]]](https://img-blog.csdnimg.cn/direct/a4b2154137af4360ae0d1eeb35b8e21f.png)
std::cout << a << std::endl << b << std::endl;
endl:换行符
>>:流提取运算符
同样可以自动识别类型
cin >> a >> b;
说明
- 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含< iostream >头文件
以及按命名空间使用方法使用std。 - cout和cin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含
<iostream>头文件中。 - <<是流插入运算符,>>是流提取运算符。
- 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。C++的输入输出可以自动识别变量类型。
- 实际上cout和cin分别是ostream和istream类型的对象,>>和<<也涉及运算符重载等知识
相关文章:
1. C++入门:命名空间及输入输出
C相比C的变化 兼容C面向对象泛型C的不足的弥补 为什么要有命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地…...
【Kotlin】Java三目运算转成 kotlin 表达
这行代码会直接计算 array.size 1 的布尔值,并将其赋值给 result。在 Kotlin 中,不需要使用三元操作符,因为条件表达式本身就返回一个布尔值 java 中三木运算: int [] array new int[]{1, 2, 3, 4, 5}; boolean test array &g…...
如何安全可控地进行内外网跨网络传输文件?
跨网络传输文件通常指的是在不同的网络环境之间移动数据,这在现代企业运营中非常常见。随着网络技术的高速发展,为了有效地保护内部的核心数据资产,企业一般会采用内外网隔离的策略。在进行内外网跨网络传输文件时,需要考虑多种因…...
Python Json数据解析
本篇主要介绍Python 中json数据如何解析、转化、保存和加载。 目录 Json数据解析 概念 作用 Json文件组成 Json转化为Python数据类型 Python数据类型转化为json 写入本地json文件 读取本地的json文件 总结 Json数据解析 概念 一种保存数据的格式 作用 可以保存本地…...
pyinstaller打包pytorch和transformers程序
记录使用pyinstaller打包含有pytorch和transformers库的程序时遇到的问题和解决方法。 环境和版本信息 操作系统:Windows 11 Python:3.10.12 pyinstaller:5.13.0 torch:2.2.2 transformers:4.40.1 打包过程和问…...
西门子数控网络IP设定配置
总结:menuselect-诊断-屏幕下方右翻页找到tcp/ip,进去选择tcp/ip诊断,进去选择x130网口,点击更改, 如果没有更改,menuselect-调试-口令,输入口令 sunrise 然后重新配置tcp/ip,配置完…...
[Unity]备份许可文件
原因:因Unity需要重新恢复出厂设置,所以需要先将许可文件本分到本地,以便重新初始化后输入许可。 1)登录管理网络web界面,在服务页面打开SSH 2)ssh到管理网络,使用service用户登录 3…...
第十五届蓝桥杯省赛大学B组(c++)
很幸运拿了辽宁赛区的省一,进入6月1号的国赛啦... 这篇文章主要对第十五届省赛大学B组(C)进行一次完整的复盘,这次省赛2道填空题6道编程题: A.握手问题 把握手情景看成矩阵: 粉色部分是7个不能互相捂手的情况 由于每个人只能和其他人捂手, 所以黑色情况是不算的 1和2握手2和…...
Python Flask框架(一)初识Flask
Flask是使用Python编写的Web微框架。Web框架可以使我们不用关心底层的请求响应处理,更方便高效的编写Web程序。Flask有两个主要依赖,一个是WSGI(Web Server Gateway Interface,web服务器网关接口)工具集,另…...
VS2022 .Net6.0 无法打开窗体设计器
拿Vs2022 建了个Demo,运行环境是net6.0-windows,无论双击或是右键都打不开窗体设计器 打开项目目录下的*.csproj.user <?xml version"1.0" encoding"utf-8"?> <Project ToolsVersion"Current" xmlns"htt…...
Linux学习之高级IO
之前的内容我们基本掌握了基础IO,如套接字,文件描述符,重定向,缓冲区等知识都是文的基本认识,而高级IO则是指更加高效的IO。 对于应用层,在读写的时候,本质就是把数据写给OS,若一方…...
一分钟了解Polysciences PEI 40K转染试剂的原理
在细胞实验中,细胞转染大概是最常用、最基础的实验技能。转染细胞的方法很多,而PEI作为带有高电荷阳离子的多聚物,非常容易结合带负电荷的DNA分子,形成复合物,在HEK293和CHO等细胞中转染效率较高,常用于大规…...
Clickhouse IP 函数
IPv4NumToString(num) 将数字类型ip转换为IPv4格式。 Takes a UInt32 number. Interprets it as an IPv4 address in big endian. Returns a string containing the corresponding IPv4 address in the format A.B.C.d (dot-separated numbers in decimal form). Alias: …...
【Python】numpy.ptp()
numpy.ptp() 函数是 NumPy 库中的一个有用函数,用于计算数组中的“峰到峰”(peak-to-peak)值,即数组中的最大值与最小值之差。这个函数可以帮助快速评估数组中数据的变化范围,常用于信号处理、数据分析等领域中&#x…...
The provided password or token is incorrect or your account
IDEA使用git技巧 【/n】 01 问题出现场景 我的gitlab上个月生成的token到期了,于是今天推上去的时候报了这个错误 The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See ht…...
常见的shell命令
以下是一些常见的shell命令: cd:改变当前目录;ls:列出目录中的文件和子目录;mkdir:创建一个新的目录;touch:创建一个新的空文件或更新已存在的文件的时间戳;rmÿ…...
堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41),framework修改,去除第三方app的倒计时页面
文章目录 堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41),framework修改,去除第三方app的倒计时页面1.打印异常堆栈2.去除第三方app的倒计时页面3.模拟点击事件跳过首页进入主页 堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41)&#x…...
只允许内网访问时,如何设置hosts
1、Hosts文件简介 hosts文件是一个没有扩展名的计算机文件,用于将主机名与对应的 IP 地址关联起来。在操作系统中,hosts文件通常用于在本地解析域名,以便将域名映射到特定的IP地址。这个文件可以用来屏蔽广告、加速访问特定网站、解决DNS解析…...
nature《自然》期刊文献怎么在家查看下载
nature《自然》期刊我们都知道,是世界上历史悠久的、最有名望的科学杂志之一。下载该期刊文献是需要使用权限的,如果你没有nature《自然》期刊的资源,又该如何获取呢?请看本文的经验分享。 一、先百度“文献党下载器” 在文献党下…...
python作业五
题目:注册登录 制作一个注册登录模块 注册:将用户填入的账户和密码保存到一个文件(users.bin) 登陆:将用户填入账户密码和users.bin中保存的账户密码进行比对,如果账户和密码完全相同 那 么登录成功,否则登录失败…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果