C++在C语言基础上的优化
目录
一、命名空间
1、命名空间的定义
2、命名空间的使用
二、输入&输出
三、缺省参数
1、缺省参数的概念
2、缺省参数的分类
四、函数重载
五、引用
1.引用的概念
2.引用的特性
3、引用和指针的区别
六、内联函数
七、基于范围的for循环
一、命名空间
命名空间用来对标识符本地化,避免命名冲突。
1、命名空间的定义
定义命名空间需要使用namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}里边为命名空间的成员。
(1)、命名空间可以定义变量/函数/类型
//命名空间
namespace lbj
{//定义变量int rand = 10;//定义函数int Add(int left, int right){return left + right;}//定义类型struct Node{struct Node* next;int val;};
}
(2)、命名空间可以嵌套定义
//2.命名空间的嵌套
namespace lbj
{int a;int b;int Add(int left, int right){return left + right;}namespace lbj_1{int c;int d;int Sub(int left, int right){return left - right;}}
}
(3)、同一个工程中允许存在多个相同名称的命名空间,编译器会自动将所有同名命名空间合并成一个命名空间。一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
2、命名空间的使用
命名空间有三种使用方式:
(1)、加命名空间名称及作用于限定符
lbj::a
(2)、使用using将命名空间中的某个成员引入
using lbj::a;
(3)、使用using namespace +命名空间名称引入
using namespace lbj;
二、输入&输出
C++的输入和输出分别是:cin和cout,cin是标准输入对象,cout 是标准输出对象,使用时必须包含头文件<iostream>以及按命名空间使用方法使用std。
cin和cout可以自动识别变量类型,不需要手动控制格式。
#include<iostream>
using namespace std;
int main()
{int a;double b;char c;//可以自动识别变量类型cin >> a;cin >> b >> c;cout << a << endl;//endl表示换行输出cout << b << " " << c << endl;return 0;
}
三、缺省参数
1、缺省参数的概念
缺省参数是声明或定义函数时为函数的参数指定一个缺省值(即默认值)。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
#include<iostream>
using namespace std;
void Func(int a = 0)
{cout << a << endl;
}
int main()
{Func(); //没有传参,使用参数的默认值(缺省值)Func(10); //传参,使用指定的实参return 0;
}
2、缺省参数的分类
(1)、全缺省参数:所有参数全部设定了缺省值
//全缺省参数
void Func(int a=1,int b=4,int c=7)
(2)、半缺省参数:部分参数设定了缺省值
//半缺省参数
void Func(int a, int b, int c = 7)
注意:半缺省参数必须从右往左依次给出,不能有间隔;缺省参数不能在函数的声明和函数定义中同时出现,一般采用设定在函数声明中,不设定在函数定义中;缺省值必须是常量或全局变量
四、函数重载
C++允许在同一作用域中声明多个功能类似的同名函数,这些同名函数的形参列表(参数个数或参数类型或参数类型的顺序)不同,常用来实现功能类似数据类型不同的问题。函数重载即函数名相同,参数不同。
参数类型不同:
//1.参数类型不同
int Add(int left, int right)
{return left + right;
}
double Add(double left, double right)
{return left + right;
}
参数个数不同:
//2.参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}
参数类型的顺序不同:
//3.参数类型的顺序不同
void f(int a, char b)
{cout << "f(int a, char b)" << endl;
}
void f(char a, int b)
{cout << "f(char a, int b)" << endl;
}
C++支持函数重载,而C语言不支持函数重载是因为C++是通过函数修饰规则来区分同名函数的,只要函数的参数不同,修试出来的名字也就不同,所以支持重载,而C语言没法识别同名函数,所以不支持函数重载。如果两个同名函数的参数是一样的,只有返回值不同是不能够成重载的。切记函数重载的关键是函数参数,不是返回值。
五、引用
1.引用的概念
引用是给已经存在的变量取别名。引用变量和它所引用的实体变量共用一块内存空间,编译器不需要为引用变量开辟新的内存空间。
类型+&+引用变量名=引用实体
void test()
{int a=10;int& ra=a;//引用变量ra是a的别名
}
2.引用的特性
(1)引用在定义时必须初始化;
(2)一个变量可以有多个引用;
(3)引用一旦引用一个实体,就不能再引用其他实体;
(4)引用的权限可以平移、可以缩小,但不能放大;
(5)引用做函数参数,改变形参也会改变实参。引用在语法概念上是一个别名,和其引用实体共用同一快内存空间,但是在底层实现上,引用时按照指针的方式来实现的;
(6)引用做返回值,如果函数返回,除了函数的作用域,返回对象还在(函数只运行了一次),则可以使用引用返回,如果返回对象已经还给系统(函数运行了不止一次),则必须使用传值返回,不能再使用引用返回。
3、引用和指针的区别
(1)引用时一个变量的别名,指针存储变量的地址。
(2)引用在定义时必须初始化,指针不用。
(3)引用在引用一个实体之后就不能再引用其他实体,指针可以在任何时候指向任何一个同类型实体。
(4)没有空引用,有空指针。
(5)引用自加即引用的实体加1,指针自加即指针向后偏移一个类型的大小。
(6)引用比指针使用起来相对更安全。
六、内联函数
以inline修饰的函数叫做内联函数,编译时C++会在调用内联函数的地方展开函数体,没有函数调用建立栈帧的开销,内联函数可以提升程序的运行效率。
inline是一种以空间换时间的做法,在编译阶段会用函数体替换函数调用,少了调用开销,提高程序运行效率,但是可能造成目标文件变大。
inline对于编译器而言只是一个建议、一个请求,编译器可以选择忽略这个请求。一般函数规模较小、不是递归、频繁调用的函数使用内联。
inline不建议函数声明和定义分离(指的是不同文件),会导致连接错误。
七、基于范围的for循环
C++11中引入了基于范围的for循环。for循环后的括号有冒号‘:’分为两部分,第一部分是范围内用于迭代的变量,第二部分是被迭代的范围。
//基于范围的for循环
#include<iostream>
using namespace std;
void test_for()
{int arr[] = { 1,3,5,7,9 };for (auto& e : arr){e *= 2;}for (auto e : arr){cout << e << " ";}cout << endl;
}
int main()
{test_for();return 0;
}
注意:基于范围的for循环中的continue和break和普通循环类似用法
相关文章:

C++在C语言基础上的优化
目录 一、命名空间 1、命名空间的定义 2、命名空间的使用 二、输入&输出 三、缺省参数 1、缺省参数的概念 2、缺省参数的分类 四、函数重载 五、引用 1.引用的概念 2.引用的特性 3、引用和指针的区别 六、内联函数 七、基于范围的for循环 一、命名空间 命名空…...

分享一个python实验室设备预约管理系统 实验室设备维修系统源码 lw 调试
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...

兵者多诡(HCTF2016)
环境:https://github.com/MartinxMax/CTFer_Zero_one 题目简介 解题过程 登录首页 提交png图片上传抓包,可以看到是向upload文件提交数据 在fp参数中尝试伪协议读取home.php文件 http://127.0.0.1:88/HCTF2016-LFI/home.php?fpphp://filter/readconvert.base64…...

【JAVA-Day04】Java关键字和示例:深入了解常用关键字的用法
Java关键字和示例:深入了解常用关键字的用法 摘要Java 关键字、标识符和命名规范一、Java 关键字常用关键字DEMO1. 示例代码使用 if 和 else 关键字:2. 示例代码使用 for 循环:3. 示例代码使用 switch 关键字:4. 示例代码使用 wh…...
Android请求网络报错:not permitted by network security policy
一、错误记录 https的接口请求正常的, 请求http的接口时报错:not permitted by network security policy 二、问题分析 原因: 由于 Android P(版本27以上) 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。如果当…...
python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1
python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1 问题分析 说明:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1以上版本,否则报错: ImportError: urllib3 v2.0 only supports Ope…...
如何使用adb command来设置cpu频率和核数
透過ADB Shell設定CPU開核與freq的command與用法如下: # Disable PPM echo 0 > /proc/ppm/enabled # Enable PPM (Default) echo 1 > /proc/ppm/enabled echo 0 > /proc/ppm/enabled Fixed # Core for each cluster echo X Y > /proc/ppm/policy/ut_fix_core_num …...

236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先 题目-中等难度示例1. dfs 题目-中等难度 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p…...
Git常见问题:git pull 和 git pull --rebase二者区别
git pull 和 git pull --rebase 都是从远程仓库获取最新的更改并将其合并到本地分支。但它们之间的区别在于合并方式。以下是它们之间的主要区别: git pull: 当你执行 git pull 时,Git 会执行以下两个操作: git fetchÿ…...

关于HarmonyOS元服务的主题演讲与合作签约
一、感言 坚持中,总会有很多意想不到的收获。 前几次参与HDC时更多的是观众、开发者、专家的身份,以参观、学习、交流为主。 通过几年的努力,和HarmonyOS功能成长,在2023年的HDC大会中,有了我的演讲,并带领…...
cache 学习
好文章: Cache的基本原理 - 知乎...

SSM - Springboot - MyBatis-Plus 全栈体系(六)
第二章 SpringFramework 四、SpringIoC 实践和应用 3. 基于 注解 方式管理 Bean 3.1 实验一:Bean 注解标记和扫描 (IoC) 3.1.1 注解理解 和 XML 配置文件一样,注解本身并不能执行,注解本身仅仅只是做一个标记,具体的功能是框…...

【Flutter】引入网络图片时,提示:Failed host lookup: ‘[图片host]‘
在使用 NetworkImage 组件加载外部图片时,提示 Failed host lookup: [图片host] 错误。 排查方向 1、清理缓存 解决方案: 尝试flutter clean清空缓存后重新安装依赖flutter pub get重新构建项目flutter create . 走完上述三个步骤后,再次…...

Python基础教程:索引和切片
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 索引(下标) 索引又称下标,用来表示可迭代对象中的某个元素的位置。 用正整数表示的索引值,从左向右定位,从 0 开始计数,如 0,1&#…...

JVM基础面试题
JDK、JRE、JVM的关系 JVM Java虚拟机,它只识别.class类型文件,它能将class文件中的字节码指令进行识别并调用操作系统向上的API完成动作。 JRE Java运行时环境。它主要包含两部分:Jvm的标准实现和Java的一些基本类库。相对于JVM来说,JRE多出来…...
蓝桥杯官网填空题(平方末尾)
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 能够表示为某个整数的平方的数字称为“平方数” 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数。 因为平方数的末位只可能是&#x…...

深入探究数据结构与算法:构建强大编程基础
文章目录 1. 为什么学习数据结构与算法?1.1 提高编程技能1.2 解决复杂问题1.3 面试准备1.4 提高代码效率 2. 学习资源2.1 经典教材2.2 在线学习平台2.3 学习编程社区 3. 数据结构与算法的实际应用3.1 排序算法3.2 图算法3.3 字符串匹配算法 4. 结论 🎉欢…...

Android 自定义View之圆形进度条
很多场景下都用到这种进度条,有的还带动画效果, 今天我也来写一个。 写之前先拆解下它的组成: 底层圆形上层弧形中间文字 那我们要做的就是: 绘制底层圆形;在同位置绘制上层弧形,但颜色不同ÿ…...
力扣(LeetCode)算法_C++——字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,“tan”…...

【LeetCode-中等题】59. 螺旋矩阵 II
文章目录 题目方法一:二维数组缩圈填数字方法二: 题目 方法一:二维数组缩圈填数字 定义四个边界条件,每转一圈,把数值填进去,然后缩小一圈,直到不满足条件位置 结束循环条件可以是: …...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...