C++ ——基础进阶
1、引用
概念:相当于给变量取个别名,通过使用&在变量定义时定义
1.1 性质
(1)成为一个变量的引用后,就不能成为其他变量的引用
int a=1;int& a_cite=a;int b=90;a_cite=b; //相当于把b的值给了a_citecout<<a_cite<<endl; //90cout<<a<<endl; //90cout<<b<<endl; //90a++;cout<<a_cite<<endl; //91cout<<a<<endl; //91cout<<b<<endl; //90// int&a_cite=b; //错误
(2)引用必须初始化,并且不可以为NULL
int c=0;// int&c_cite; //错误,引用必须初始化// int&c_cite=NULL; //错误,不能初始化为NULL
(3)引用可以是纯数字的引用,当作为纯数字的引用时,需要加const修饰,代表其引用的数值不可修改
const int&cite=55;cout<<cite<<endl;// cite++; //报错,纯数字的引用不能修改
(4)变量的引用如果使用const修饰,此时该引用叫常引用,表示不能通过引用修改变量的值,但可以通过原变量修改变量的值
int d=1;const int&d_cite=d; //常引用// d_cite=90; //错误,常引用不能修改变量的值d=100;cout<<d_cite<<endl; //100cout<<d<<endl; //100
(5)可以给指针变量建立引用,相当于给指针变量取了别名,该引用指向原变量
int f=7;int*p=&f;int*&p_cite=p; //整型指针引用cout<<p<<endl; //0000003D2D13F67Ccout<<*p<<endl; //7cout<<p_cite<<endl; //0000003D2D13F67Ccout<<*p_cite<<endl; //7*p_cite=1;cout<<f<<endl; //1cout<<*p<<endl; //1cout<<*p_cite<<endl; //1
(6)可以是指针指向引用的地址,相当于指向了变量的地址
int e=90;int&e_cite=e;// int*ptr=&e; //方法一int*ptr=&e_cite; //方法二cout<<*ptr<<endl; //90*ptr=100;cout<<e<<endl; //100cout<<e_cite<<endl; //100
1.2 函数参数的传递
C++中函数参数的传递有三种:
(1)值传递:只是实参的拷贝,形参改变不会影响到实参
#include <iostream> //iostream:输入输出流文件 ,相当于stdint.husing namespace std; //命名空间void add_number1(int number);int main() //入口函数{int number=1;add_number1(number);cout<<number<<endl; //1return 0;}void add_number1(int number){number++;cout<<number<<endl; //2}
(2)引用传递:不会产生拷贝副本,相当于操控变量本身,形参改变会影响到实参
#include <iostream> //iostream:输入输出流文件 ,相当于stdint.husing namespace std; //命名空间void add_number2(int& number);int main() //入口函数{//引用传递:是把变量的引用传递函数,函数内部对参数的改变,函数外部的变量也会受到影响int number=1;add_number2(number);cout<<number<<endl; //2return 0;}void add_number2(int& number){number++;cout<<number<<endl; //2}
(3)指针传递:是把变量的地址传递给函数,函数内部对变量的修改也会影响带函数外部原来的变量
建议:
(1)如果函数体内对参数的改变,在函数体外需要受到影响,推荐选择引用传递,不推荐指针传递
#include <iostream> //iostream:输入输出流文件 ,相当于stdint.husing namespace std; //命名空间void change_number1(int&c1,int&c2);int main() //入口函数{int num1=7,num2=9;change_number1(num1,num2);cout<<"num1="<<num1<<",num2="<<num2<<endl; //num1=9,num2=7return 0;}void change_number1(int&c1,int&c2){int num=0;num=c1;c1=c2;c2=num;}
(2)如果函数体内对参数的改变,在函数体外不需要受到影响,推荐使用引用传递,加const修饰
#include <iostream> //iostream:输入输出流文件 ,相当于stdint.husing namespace std; //命名空间void change_number2(const int& num);int main() //入口函数{int num1=7,num2=9;change_number2(num1);cout<<num1<<endl; //9return 0;}void change_number2(const int& num){cout<<num*100<<endl; //900}
2、内联函数inline
定义:使用inline关键字修饰的函数,取代了C中宏函数
对比:普通函数需要经历函数调用,函数调用比较消耗性能;内联函数与宏函数相同,是在预处理阶段,进行函数体的展开,不需要经历函数调用
总结:内联函数是一个空间换时间的方法,缺点:会增大可执行文件的体积;优点:不需要经历函数调用的过程,提高了效率
内联函数的使用条件:
(1)函数体逻辑代码不能太复杂,不能包含for、while、switch等符合语句
(2)函数代码少于5行
(3)函数调用频繁
#include <iostream>#include <string>#include <sstream>using namespace std;inline void func();int main(){func();return 0;}inline void func(){cout<<"gbsrhwrw"<<endl;}
3、函数参数的默认值
C++中允许给函数参数添加默认值,调用函数时,如果不传递参数则使用默认值;如果传递参数则覆盖默认值。默认值可以提高程序的灵活性
注意事项:
(1)函数定义和声明分离时,推荐函数参数的默认值设置在声明处
(2)函数声明和定义不分离,函数参数的默认值设置在定义处
(3)当函数有多个参数时,函数参数的默认值遵循“向右(向后)原则”,即一个参数有默认值,其后的参数都要有默认值
#include <iostream>#include <string>#include <sstream>using namespace std;void fn1(int a,int b=1);int main(){fn1(100,200); //300fn1(100); //101return 0;}void fn1(int a,int b){cout<<"a+b="<<a+b<<endl;}
4、函数的重载
C++中允许定义同名函数来处理相同的业务逻辑
注意:
(1)重载函数调用时,可以根据参数的类型不同、参数的个数不同进行区分,不能通过返回值类型不同进行区分
(2)函数重载不要和函数默认值一起使用,容易产生错误
#include <iostream>#include <string>#include <sstream>using namespace std;void show();void show(int a);void show(string str);void show(int a,int b);int main(){show();show(89);show("hello");show(12,34);return 0;}void show(){cout << "哈哈哈" << endl;}void show(int a){cout << a << endl;}void show(string str){cout << str << endl;}void show(int a,int b){cout << a+b << endl;}
相关文章:
C++ ——基础进阶
1、引用 概念:相当于给变量取个别名,通过使用&在变量定义时定义 1.1 性质 (1)成为一个变量的引用后,就不能成为其他变量的引用 int a1; int& a_citea; int b90; a_citeb; //相当于把b的值给了a_cite cout&l…...
@synchronized的使用
synchronized 介绍 synchronized 是 Objective-C 提供的一种 互斥锁(Mutex),它用于确保一段代码在同一时间只有一个线程能执行,避免多线程访问共享资源时出现数据竞争。 基本语法 synchronized (lockObject) {// 需要加锁的代码…...
策略模式-小结
总结一下看到的策略模式: A:一个含有一个方法的接口 B:具体的实行方式行为1,2,3,实现上面的接口。 C:一个环境类(或者上下文类),形式可以是:工厂模式,构造器注入模式,枚举模式。 …...
【Stable Diffusion部署至Google Colab】
Google Colab 中快速搭建带 GPU 加速的 Stable Diffusion WebUI from google.colab import drive drive.mount(/content/drive) !mkdir /content/drive/MyDrive/sd-webui-files !pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index…...
Vue.js 与低代码开发:如何实现快速应用构建
在当今数字化高速发展的时代,企业对应用开发的速度和效率有着迫切的需求。传统开发模式往往周期长、成本高,难以满足市场的快速变化。而低代码开发的兴起,为这一困境带来了转机。Vue.js 作为一款流行的 JavaScript 前端框架,以其简…...
【无标题】《On Java中文版基础卷+进阶卷》书评
Java语言作为最热门的编程语言之一,关于Java语言的书更是数不胜数,而我选择这本《On Java中文版基础卷进阶卷》作为我学习Java语言的工具书。这本书的作者是《Java编程思想》的Bruce Eckel,《Java编程思想》在之前可谓是鼎鼎有名,…...
Spring Boot从入门到精通:核心知识点+实战指南
目录 一、Spring Boot 是什么?为什么它如此流行? 二、快速创建你的第一个Spring Boot应用 2.1 使用Spring Initializr生成项目 2.2 核心代码示例 三、深度解析Spring Boot核心机制 3.1 自动配置原理揭秘 3.2 自定义Starter实战 四、生产环境必备…...
网络安全 | 网络安全自动化:让防护更智能高效
网络安全 | 网络安全自动化:让防护更智能高效 一、前言二、网络安全自动化的核心概念2.1 定义与内涵2.2 与传统网络安全方法的区别 三、网络安全自动化的应用领域3.1 威胁检测与响应3.2 漏洞管理3.3 访问控制与身份认证 四、推动网络安全自动化发展的因素4.1 技术进…...
时间敏感和非时间敏感流量的性能保证配置
论文标题 中文标题: 时间敏感和非时间敏感流量的性能保证配置 英文标题: Provisioning of Time-Sensitive and non-Time-Sensitive Flows with Assured Performance 作者信息 Luis Velasco, Gianluca Graziadei, Sima Barzegar, Marc Ruiz Optical Co…...
502 Bad Gateway 错误详解:从表现推测原因,逐步排查直至解决
502 Bad Gateway 错误通常意味着服务器之间的通信失败,但导致的具体原因往往因场景而异。 场景一:高峰期频繁出现 502 错误 1.1 现象 在流量高峰期间(如促销活动、直播发布等),页面访问变慢甚至出现 502 错误&#…...
如何获取,CPU,GPU,硬盘,网卡,内存等硬件性能监控与各项温度传感器
首先需要下载 OpenHardwareMonitorServer 这是一个基于OpenHardwareMonitor 的 Web 服务器。可以让任何语言都可以获取硬件信息和值,OpenHardwareMonitorServer 是没有UI界面的因此它可以当成控制台程序使用。 该程序可用参数如下 参数:需要管理员权限…...
4. React 中的 CSS
用例中的干净的脚手架的创建可以参考另一篇文章:3.React 组件化开发React官方并没有给出在React中统一的样式风格: 由此,从普通的css,到css modules,再到css in js,有几十种不同的解决方案,上百…...
【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞
文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析 4.1:代码分析 4.2:流量分析 5.poc代码: 1.漏洞描述 漏洞编号:CVE-2019-17621 漏洞名称:D-Link DIR-859 命令注入漏洞 威胁等级:严重 漏洞详…...
FastExcel + Java:打造高效灵活的Excel数据导入导出解决方案
作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 基于AOP的数据字典实现…...
fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系
Transformer、Seq2Seq、Encoder-Decoder、Attention由这四者之间的关系可以从模型架构的发展脉络来理解: Seq2Seq 与 Encoder–Decoder 模型 “Seq2Seq”(sequence‐to‐sequence)是一类用于将一个变长序列映射为另一个变长序列的任务&#x…...
使用Hexo部署NexT主体网站
一.使用git提交文件 参考: 从零开始搭建个人博客(超详细) - 知乎 致谢! 第一种:本地没有 git 仓库 直接将远程仓库 clone 到本地;将文件添加并 commit 到本地仓库;将本地仓库的内容push到远程仓…...
图书管理项目(spring boot + Vue)
想要该项目的话,就 jia 我,并在评论区给我说一下,只需要1元,我把整个项目发给你 jia微:18439421203(名字叫:Bingo) 运行图片:...
python实现常见数学概率分布
常见正态分布 1.贝塔分布1.1 概率密度函数1.2参数对分布形状的影响1.3 应用场景1.4 python实现 2. 帕累托分布(80/20法则)3. 正态分布(高斯分布)3.1 正态分布对应性质3.2 正态分布对应图像实现的完整项目示例,包含权限控制、数据加载状态处理、性能优化等常见高级功能。创建一个简单的博客系统: // 项目结构: src/ |-- components/ | |-- ArticleList.jsx | |-- Article.jsx | |-- He…...
Midjourney Spinach印相实操手册:手把手配置--sref、--stylize、--cw权重,5分钟复刻暗房级颗粒与褪色层次
更多请点击: https://intelliparadigm.com 第一章:Midjourney Spinach印相的核心美学溯源 Midjourney Spinach印相并非官方功能命名,而是社区对一类高对比度、低饱和、肌理感强烈且带有手工暗房隐喻的图像生成风格的诗意指称。“Spinach”一…...
PP 蜂窝板挤出成型核心原理与关键设备解析
PP 蜂窝板挤出成型核心原理与关键设备解析一、PP 蜂窝板材料特性与成型难点PP(聚丙烯)蜂窝板兼具质轻、高刚性、耐水防潮、可循环四大优势,在物流、建筑、车厢、包装领域替代传统实心板材趋势明显。 其成型难点集中在:蜂窝芯超薄、…...
如何快速掌握LyricsX:macOS终极歌词同步工具完整指南
如何快速掌握LyricsX:macOS终极歌词同步工具完整指南 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX LyricsX是一款专为macOS设计的终极歌词应用,能够自动同步音乐…...
Fabric 结合IPFS 链码示例
购买专栏前请认真阅读:《Fabric项目学习笔记》专栏介绍 package mainimport ("bytes""encoding/json""fmt""time""github.com/hyperledger/fabric/core/chaincode/shim"sc "github.com/hyperledger/fabric/protos/pee…...
别再微调模型了!Claude 3.5 Sonnet新增3类零样本指令模板:Prompt工程师的最后护城河正在崩塌?
更多请点击: https://intelliparadigm.com 第一章:Claude 3.5 Sonnet零样本指令能力的范式跃迁 Claude 3.5 Sonnet 在零样本(zero-shot)场景下展现出前所未有的指令理解与泛化能力,标志着大模型从“模式复现”向“意图…...
Spring Boot项目接入Claude的3种生产级方案,含安全沙箱、审计日志与LLM调用熔断机制
更多请点击: https://intelliparadigm.com 第一章:Spring Boot项目接入Claude的3种生产级方案,含安全沙箱、审计日志与LLM调用熔断机制 在高可用AI服务场景中,将Claude大模型能力安全、可控、可观测地集成进Spring Boot应用&…...
iPhone 5s系统工程解析:LPDDR3内存与E2NAND存储的协同进化
1. 项目概述:iPhone 5s,一场被低估的系统性工程胜利2013年9月,当苹果发布iPhone 5s时,聚光灯几乎全部打在了那个划时代的64位A7处理器上。媒体和消费者的讨论都围绕着“桌面级性能”和“移动计算新时代”展开。作为一名在消费电子…...
FreeVA:零训练成本,用图像大模型实现视频理解的新范式
1. 项目概述:一个无需训练的“零成本”视频助手 最近在折腾多模态大模型(MLLM)的时候,我发现了一个挺有意思的现象:大家一提到让模型理解视频,第一反应就是得搞“视频指令微调”。简单说,就是拿…...
Nature论文检索正在失效,Perplexity底层检索逻辑重构预警(仅限科研骨干内部流通的3条技术简报)
更多请点击: https://intelliparadigm.com 第一章:Nature论文检索正在失效,Perplexity底层检索逻辑重构预警(仅限科研骨干内部流通的3条技术简报) 检索信号衰减的实证观测 近期对Nature、Science主站及PubMed Centra…...
FinFET与FD-SOI工艺下的IC可靠性验证关键技术
1. 集成电路可靠性验证的挑战与演进在28nm工艺节点之前,芯片设计工程师面临的选择相对简单——只需沿着摩尔定律的轨迹向下一个工艺节点迁移。但随着FinFET和FD-SOI等新型晶体管结构的出现,以及台积电、三星等代工厂推出的多样化工艺节点选项,…...
