C++入门(未完待续)
1.命名空间
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员
①.普通的命名空间
namespace N1{//命名空间的内容,既可以定义变量,又可以定义函数
int a;
int Add(int left,int right){
return left+right;
}
}
②.命名空间可以嵌套
namespace N1{//命名空间的内容,既可以定义变量,又可以定义函数
int a;
int Add(int left,int right){
return left+right;
}
namespace N3{
int c;
int d;
int sub(int left,int right){
return left-right;
}
}
③.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间
命名空间的使用
①.加命名空间名称和域作用限定符
int main(){
printf("%d",N::a);
return 0;
}
②.使用using将命名空间中成员引入
using N::b
int main(){
pritnf("%d",N::b);
return 0;
}
③.使用using namespace 命名空间名称引入
using namespace N;
using namespace N;//全部展开,全部授权
using N::add;//部分展开,部分授权
using namespace std;
std是c++标准库的命名空间
2.c++输入/输出
<<流插入运算符
流提取运算符
cout<<"hello world"<<endl;
endl为换行符
cout<<"hello world"<<"\n";
两者效果相同
使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含头文件以及std标准命名空间
使用c++输入输出更加方便,不需增加数据控制格式,比如整形"%d” 字符"%c"
注意cin的特点,与c语言中gets有些类似,gets是遇到换行符停止,而cin是遇到空格,tab或者换行符作为分隔符的,
char arr[20]={};
cin>>arr;
输入hello world 但由于中间存在空格,故arr这个数组中只有hello,没有world
3.缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
void func(int a=10){
cout<<a<<endl;
}
int main(){
func();//没有传参时,使用参数的默认值
func(10);//传参时,使用指定的实参
}
分类
全缺省参数
void func(int a=10;int b=20;int c=30){}
半缺省参数
void func(int a,int b=20;int c=30){}
注意①.半缺省参数必须从右往左依次来给,不能间隔着给
②.缺省参数不能在函数的声明和定义中同时出现
因为如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用哪个缺省值
声明不给定义给
③.缺省值必须是常量或者全局变量
//正确示例
int x = 3;//全局变量
void func(int a, int b = 2, int c = x)
{cout << a << endl;cout << b << endl;cout << c << endl;
}
4.函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的
形参列表(参数个数 或类型或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
#include <iostream>
using namespace std;int Add(int x, int y)
{return x + y;
}double Add(double x, double y)
{return x + y;
}
int main()
{cout << Add(0,1) << endl;//打印0+1的结果cout << Add(1.1,2.2) << endl;//打印1.1+2.2的结果return 0;
}
注意:若仅仅只有返回值不同,其他都相同,则不构成函数重载。
c语言与c++类似,都要进行编译和链接两个过程
编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址实在b.o中
链接器看到a.o调用Add,但没有Add的地址,就会到b.o的符号表(符号表就是函数名,变量跟地址的映射)中去找Add的地址,然后链接到一起。面对多个Add函数,每个编译器有自己的修饰规则,在gcc下的修饰规则是:【_Z+函数长度+函数名+类型首字母】。
之所以c语言无法支持重载,是因为C编译器和C++编译器对函数名的修饰不同
所以,返回值的不会构成函数重载,因为修饰规则并不会受返回值的影响。
如果函数名修饰规则带入返回值,返回值能否构成重载?
不能,因为不知道要调用谁
5.引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它
引用的变量共用同一块内存空间。
类型& 引用变量名(对象名) = 引用实体;
int a=10;
int&b=a; //相当于给a取了一个别名,给b引用了a,同一个变量取了个名字
b=3;//改变b也就相当于改变a了
引用类型必须和引用实体是同种类型的
引用的特性
①.引用在定义时必须初始化
//正确示例
int a = 10;
int& b = a;//引用在定义时必须初始化
//错误示例
int a = 10;
int &b;//定义时未初始化
b = a;
②.一个变量可以有多个引用
int a = 10;
int& b = a;
int& c = a;
int& d = a;
③.引用一旦引用了一个实体,就不能再引用其他实体(c++的引用不能改变指向)
int a = 10;
int& b = a;
int c = 20;
b = c;//错误,b已经引用了a,就不能在引用c
实际效果变为,b的值变为20,而因为a与b相同,故a的值也变成了20
常引用
在引用的过程中,权限可以平移,可以缩小,但不能放大
const int a=10;
int&b=a;
会出现错误,相当于权限的放大,因为在这里a为常量,如果用int&b=a;那么,b可以修改,但a不可以修改
const int&ra=a;
相当于权限的平移,不会出错
int&b=10;
会出现错误,b为常量,需要改为
const int&b=10;
int i=0;
double&d=i;
会出现错误,因为发生类型转换时会产生一个double类型临时变量,临时变量具有常性
(int到double存在隐式类型的提升,而在提升的过程中系统会创建一个常量区来存放a类型提升后的结果)
需要改为
int i=0;
const double&d=i;
int func(){
int a=0;
return a;
}
int&ret=func();
会出现问题,因为func的返回值是a的一份临时拷贝,临时变量具有常性
需改成
const int&ret=func();
引用的使用场景
①.做参数
void swap(int&left,int&right){
int temp=left;
left=right;
right=temp;
}
②.做返回值
当然引用也能做返回值,但是要特别注意,我们返回的数据不能是函数内部创建的普通局部变量,因为在函数内部定义的普通的局部变量会随着函数调用的结束而被销毁。我们返回的数据必须是被static修饰或者是动态开辟的或者是全局变量等不会随着函数调用的结束而被销毁的数据。
int& count(){int n=0;n++;return n;
}
int main(){int ret=count();return 0;
}
count函数返回n的别名,但是n已经销毁,如果栈帧没有清楚,那么结果为1,否则结果为随机值
#include<iostream>
using namespace std;
int&Add(int a,int b){int c=a+b;return c;
}
int main(){int&ans=Add(1,2);Add(3,4);cout<<ans<<endl;
}
但如果再加上一句cout<<ans<<endl;打印出的结果将变为随机值
因为在第一次调用cout<<ans<<endl时,函数传参建立栈帧,调用完后被覆盖,第二次调用时已经被覆盖,为随机值
#include<iostream>
using namespace std;
int& Add(int a, int b)
{static int c = a + b;return c;
}int main()
{int& ans = Add(1,2);Add(3, 4);cout << ans << endl;
}
为什么会出现随机值,因为你在函数里定义的变量是临时变量,出了函数函数是会销毁的,这时它就随机指向内存中的一块空间了。所以在引用做函数返回值时最好还是给在函数中定义的变量加上static。加上static后,结果将变为3。
因为第二次调用Add函数时,static int c=a+b;并不会执行,而是直接return c;
但如果将该函数修改为
int& Add(int a, int b)
{static int c ;c=a+b;return c;
}
总结:
传引用传参(任何时候都可以)
①.提高效率
②.输出型参数(形参的修改影响实参)
传引用返回(出了函数作用域对象还在才可以用)
①.提高效率
②.
顺序表查找和修改可以用一个函数来解决
int& SLAT(struct seqlist&ps,int i){
return ps.a[i];
}
想要修改SLAT(s,0)=1;
相关文章:
C++入门(未完待续)
1.命名空间 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员 ①.普通的命名空间 n…...
Python爬虫学习笔记(四)————XPath解析
目录 0.xpath最新下载地址和安装教程 1.xpath安装 2.xpath基本使用 3.xpath基本语法 4.实例 (1)xpath解析本地文件 (2)xpath解析服务器响应的数据 ①获取百度网站的“百度一下”四个字 ②获取站长素材网站情侣图片前十页的…...

知识图谱推理的学习逻辑规则(上)
知识图谱推理的学习逻辑规则 摘要介绍相关工作模型知识图谱推理逻辑规则概率形式化参数化优化 实验实验设置实验结果 结论 原文: 摘要 本文研究了在知识图谱上进行推理的学习逻辑规则。 逻辑规则用于预测时提供了可解释性并且可以推广到其他任务中,因…...

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)
目录 前言: 委托构造函数: 类内初始化: 空指针: 枚举类: 总结: 前言: C的学习难度大,内容繁多。因此我们要及时掌握C的各种特性,因此我们更新本篇文章,向…...

你真的会用async和await么?
背景 背景就是遇到了一个比较烦人的模块,里面的涉及到了大量的async 和 awiat。发现大多人对这个语法糖一知半解,然后大量的滥用,整理一下 async 前置知识: Promise.resolve(foo) new Promise(resolve > resolve(foo)…...

vscode远程连接提示:过程试图写入的管道不存在(删除C:\Users\<用户名>\.ssh\known_hosts然后重新连接)
文章目录 复现过程原因解决方法总结 复现过程 我是在windows上用vscode远程连接到我的ubuntu虚拟机上,后来我的虚拟机出了点问题,我把它回退了,然后再连接就出现了这个问题 原因 本地的known_hosts文件记录服务器信息与现服务器的信息冲突了…...

【005】基于深度学习的图像语 通信系统
摘要 语义通信是一种新颖的通信方式,可通过传输数据的语义信息提高带宽效率。提出一种用于无线图像传输的系统。该系统基于深度学习技术开发并以端到端(E2E)的方式进行训练。利用深度学习实现语义特征的提取和重建,在发送端提取信…...

基于ssm的社区生活超市的设计与实现
博主介绍:专注于Java技术领域和毕业项目实战。专注于计算机毕设开发、定制、文档编写指导等,对软件开发具有浓厚的兴趣,工作之余喜欢钻研技术,关注IT技术的发展趋势,感谢大家的关注与支持。 技术交流和部署相关看文章…...

长短期记忆网络(LSTM)原理解析
长短期记忆网络(Long Short-Term Memory,简称LSTM)是一种常用于处理序列数据的深度学习模型。它在循环神经网络(Recurrent Neural Network,RNN)的基础上进行了改进,旨在解决传统RNN中的梯度消失…...

vscode debug的方式
在.vscode文件夹下建立launch.json 例子1:调试python 来自 https://github.com/chunleili/tiPBD/tree/amg {"version": "0.2.0","configurations": [{"name": "hpbd 5 5","type": "python&quo…...

微信加粉计数器后台开发
后台包括管理后台与代理后台两部分 管理后台 管理后台自带网络验证卡密系统,一个后台可以完成对Pc端的全部对接,可以自定义修改分组名称 分享等等代理后台 分享页 调用示例 <?php$request new HttpRequest(); $request->setUrl(http://xxxxxxx/api); $request->…...

黑客是什么?想成为黑客需要学习什么?
什么是黑客 在《黑客辞典》里有不少关于“黑客”的定义, 大多和“精于技术”或“乐于解决问题并超越极限”之类的形容相关。然而,若你想知道如何成为一名黑客,只要牢记两点即可。 这是一个社区和一种共享文化,可追溯到那群数十年前使…...
iOS中__attribute__的使用
通过__attribute编译期指令将数据注册至Mach-O指定段的section,可以提供更灵活的注册方式,避免了非必要依赖。通过这种方式不仅仅能够在任何地方注册string,甚至可以注册C函数。 下面的库提供了注册和读取内容的简单方式,主要支持…...

腾讯、飞书等在线表格自动化编辑--python
编辑在线表格 一 目的二 实现效果三 实现过程简介1、本地操作表格之后进入导入在线文档2、直接操作在线文档 四 实现步骤讲解1、实现方法的选择2、导入类库3、设置浏览器代理直接操作已打开浏览器4、在线文档登录5、在线文档表格数据操作6、行数不够自动添加行数 五 代码实现小…...
开源库nlohmann json使用备忘
nlohmann/json是一个用于解析JSON的开源C库,口碑一流,无需额外安装其他第三方库,还支持单个头文件模式,使用起来非常方便直观。 1. 编译 从官网https://github.com/nlohmann/json的Release页面下载单个json.hpp即可直接使用&…...
语音识别开源框架 openAI-whisper
Whisper 是一种通用的语音识别模型。 它是OpenAI于2022年9月份开源的在各种音频的大型数据集上训练的语音识别模型,也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 GitHub - yeyupiaoling/Whisper-Finetune: 微调Whisper语音识别模型和加速推理…...
php做的中秋博饼游戏之绘制骰子图案功能示例
先看代码 header(Content-Type:image/png); $img imagecreatetruecolor(200, 200); $white imagecolorallocate($img, 255, 255, 255); $grey imagecolorallocate($img, 100, 100, 100); $blue imagecolorallocate($img, 0, 102, 255); $red imagecolorallocate($img, …...
erlang 虚拟机优化参数
sbwt none 将CPU忙等待关闭将有助于降低系统显示的CPU使用率,因为开启了忙等待的BEAM,CPU负载并不代表真实的工作情况; K true 开启epoll IO模型 swt low Sets scheduler wakeup threshold. Defaults to medium. The thresh…...

网络安全能力成熟度模型介绍
一、概述 经过多年网络安全工作,一直缺乏网络安全的整体视角,网络安全的全貌到底是什么,一直挺迷惑的。目前网络安全的分类和厂家非常多,而且每年还会冒出来不少新的产品。但这些产品感觉还是像盲人摸象,只看到网络安…...
python爬虫试手
同事让帮忙在某个网站爬点数据,首次尝试爬虫,遇到的问题及解决思路记录下。 大体需求是需要爬取详情页内的信息,详情页有一定格式规律,但是详情页需要从列表页跳入,列表页中的每一条记录需要鼠标悬停才会弹出跳转链接…...
docker镜像下载到本地,并导入服务器
应用场景 : 本地环境可以连接外网,但服务器连接不了外网,直接用docker pull 命令执行拉起镜像报异常。 1.本地拉取xuxueli/xxl-job-admin:2.2.0及查看所有下载的镜像 docker pull xuxueli/xxl-job-admin:2.2.0 docker images 2.保存镜像到…...
青少年编程与数学 01-011 系统软件简介 07 iOS操作系统
青少年编程与数学 01-011 系统软件简介 07 iOS操作系统 一、发展历程(一)诞生初期(2007 - 2008年)(二)功能拓展与升级(2009 - 2013年)(三)持续优化与创新&…...
【vLLM 学习】Cpu Offload Lmcache
vLLM 是一款专为大语言模型推理加速而设计的框架,实现了 KV 缓存内存几乎零浪费,解决了内存管理瓶颈问题。 更多 vLLM 中文文档及教程可访问 →https://vllm.hyper.ai/ *在线运行 vLLM 入门教程:零基础分步指南 源码 examples/offline_inf…...
光学字符识别(OCR)理论概述与实践教程
一、 光学字符识别(OCR)理论基础 OCR,即Optical Character Recognition,旨在通过计算机视觉和模式识别技术,将图像中包含的文本信息转换为机器可编辑、可搜索的文本数据。这项技术是实现信息数字化、自动化处理纸质或图像化文档的关键。 1. OCR处理管线 OCR系统通常采用…...

联想拯救者R9000P 网卡 Realtek 8852CE Ubuntu/Mint linux 系统睡眠后,无线网卡失效
联想拯救者R9000P 网卡型号 Realtek PCle GbE Family Controller Realtek 8852CE WiFi 6E PCI-E NIC 系统版本 Ubuntu 24.04 / mint 22.1 问题现象 rtw89_8852ce,Link is Down,xtal si not ready,mac init fail,xtal si not …...
NoSQL 之Redis哨兵
目录 一、Redis 哨兵模式概述 (一)背景与核心目标 (二)基本架构组成 (三)核心功能 二、哨兵模式实现原理 (一)配置关键参数 (二)哨兵节点的定时任务 …...

沙市区举办资本市场赋能培训会 点赋科技分享智能消费新实践
荆州市沙市区,2025年6月5日—— 在沙市区政府主办的“发挥区域性股权市场功能,助力企业拥抱资本市场”专题培训会上,区委副书记、区长郭熙胜强调要充分发挥资本市场服务实体经济功能,推动本土创新企业高质量发展。区内重点企业点赋…...
计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结
基于MATLAB的图像特征提取与匹配算法全面指南 图像特征提取与匹配 基于MATLAB的图像特征提取与匹配算法全面指南一、图像特征提取基础特征类型分类二、点特征提取算法1. Harris角点检测2. SIFT (尺度不变特征变换)3. SURF (加速鲁棒特征)4. FAST角点检测5. ORB (Oriented FAST …...

网页前端开发(基础进阶4--axios)
Ajax Ajax(异步的JavaScript和XML) 。 XML是可扩展标记语言,本质上是一种数据格式,可以用来存储复杂的数据结构。 可以通过Ajax给服务器发送请求,并获取服务器响应的数据。 Ajax采用异步交互:可以在不重新加载整个页面的情况下&am…...
jenkins结合gitlab实现CI
Jenkins结合GitLab实现CI(持续集成) 持续集成(Continuous Integration, CI)是一种软件开发实践,开发者在代码提交后,系统会自动进行构建、测试,从而尽早发现问题。Jenkins和GitLab的结合可以高效…...