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中保存的账户密码进行比对,如果账户和密码完全相同 那 么登录成功,否则登录失败…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
