【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)
一. 命名空间
1. 定义
出现的意义:解决各种函数、关键词和类的名称冲突问题。
定义方式:namespace + 命名空间的名字 + { }
(注意!}后面不加;)
- namespace 是关键词
- 命名空间的内容成员,可以是变量,函数,类型
- 可嵌套定义
- 同一个项目(工程)中允许存在多个相同名称的命名空间,编译器最后会合并到一个命名空间中。
namespace N1
{//变量int a=1;int b=2;//函数int Add(int a, int b) {return a + b;}//结构体类型struct Node{struct Node* next;int val;};//在N1命名空间中嵌套定义N2namespace N2{int a=3;}}
2. 访问
命名空间内部可直接访问,外部需指定出他属于的命名空间。
法一 用访问限定符(::)直接访问
int main() {printf("%d\n", N1::a);//1printf("%d\n", N1::N2::a);//3return 0;
}
法二 用using展开命名空间里某个单独的成员
using N1::b;
int main() {//对比 :printf("%d\n", N1::a);//1printf("%d\n", b);//2return 0;
}
法三 using展开命名空间的全部成员
using namespace N1;
int main() {printf("%d\n", a);//1printf("%d\n", b);//2return 0;
}
3. 说明
工程项目中:可能会产生命名冲突,所以把常用库里面一些对象或者类型展出来。
比如:using std::cin、using std::cout 等。
日常练习中:不在乎跟库命名冲突,所以可以把库的命名空间全部展开。
比如:using namespace std;
二. C++ 中的输入和输出
- cin >> 标准输入
- cout << 标准输出
- 需要 <iostream>头文件 和 std的命名空间
#include <iostream>
using namespace std;//日常练习using namespace std::cin;//建议项目工程时这么定义
using namespace std::cout;
int main() {int a;cin >> a;//10cout << a;//10return 0;
}
三. 缺省参数
1. 概念
缺省参数是在定义或声明函数时为函数的参数指定一个默认值。
调用该函数时,如果没有传对应的实参的值,则该参数就使用之前设定好的默认值(缺省值)。
// Func 函数有一个缺省参数
void Func(int a = 0)
{cout<<a<<endl;
}int main()
{// 没有传参时,使用参数的缺省值Func(); // 传参时,使用指定的实参Func(10);
}
2. 分类
1、全缺省(形参全部给定缺省)
void Func(int a = 1,int b = 2,int c = 3) {cout << a << endl;//1cout << b << endl;//2cout << c << endl;//3
}
2、半缺省参数(形参必须从右往左连续缺省,不可间隔缺省!)
void HalfFunc(int a, int b = 10, int c = 20) {cout << a << endl;//66cout << b << endl;//77cout << c << endl;//20
}int main() {HalfFunc(66,77);return 0;
}
3. 注意事项
- 参数缺省时,必须从右往左连续缺省。
- 带缺省参数的函数调⽤,C++规定必须从左到右依次给实参,不能跳跃给实参
- 缺省参数不能在函数的声明和定义中同时出现。如果声明和定义分离的话,建议在声明那里缺省,这样便于在头文件里查找修改。
- 缺省值必须是常量或者全局变量。
- C语言不支持缺省参数(编译器不支持)
四. 函数重载
c++允许实现功能类似,参数列表不同的同名函数。
这里的参数列表不同指的是参数的类型、顺序、个数不同
构成函数重载的条件
1. 参数个数不同
void f(int a)
{ }
void f()
{ }
2. 参数类型不同
int f(int a)
{ }
double f(double a)
{ }
3. 参数顺序不同
void f(int a,char b)
{ }
void f(char b,int a)
{ }
注意事项
1. 返回类型不同不构成重载
// 返回值类型都为 int
int Add(int a, int b)
{}// 返回值类型为double
double Add(int a, int b)
{}
2. 函数重载不可用缺省函数
void func(int a)
{}void func(int a,int b=10)
{}int main()
{// error:不明确到底是调用带缺省的还是不带缺省的func(10);
}
五. 引用
1. 概念
给已存在变量取别名,共用同一块内存空间,但编译器不会为该引用变量开辟内存空间。
(类似 林冲又叫豹子头,人民币又叫毛爷爷)
使用规则: 类型& 引用变量名 = 引用实体;
int main()
{int a = 10;int& ra = a;// ra 引用 a//也可以给别名取别名int& rra = ra;// rra 引用 ra//a和ra和rra地址相同printf("%p\n", &a);printf("%p\n", &ra);printf("%p\n", &rra);return 0;
}
2. 注意事项
- 引用变量在定义时必须初始化,即必须有引用实体。
-
int& ra;//error
- 一个变量可以有多个引用。(人民币可以叫毛爷爷,也可以叫钞票)
- 一个引用对象只能引用一个实体。(毛爷爷只能是人民币的别名,不能是你爷爷)
3. 引用和const(访问权限的放大与缩小)
首先,我们知道的是 int 访问权限(可读可写)大于 const int(仅可读)。
我们要知道一个概念,引用的访问权限只可缩小,不可放大。
int main()
{// error:权限放大const int a = 10;int& ra = a; //正常编译:允许权限缩小int b = 10;const int& rb1 = b;//权限缩小int& rb2 = b;//权限相等return 0;
}
v
4. 使用及相比的优点
(1)代替指针传参
//减少了c语言中指针对地址的解引用操作,可以直接修改实参的值
void Swap(int& left, int& right)
{int temp = left;left = right;right = temp;
}
(2)做返回值
//函数返回值就是实参本身,减少了临时变量的创建,提高效率//传引用返回
int& Count()
{static int n = 0;n++;//返回n本身return n;
}//传值返回
int Count()
{static int n = 0;n++;//返回n的值的一份临时拷贝对象return n;
}
特别说明,引用返回容易造成的非法访问
5. 指针和引用的区别(精简三点!)
- 引用不能指向空值(null),而指针可以。
- 引用在使用时不需要解引用操作(不需要
*
符号),而指针需要。 - 引用在定义时必须初始化,而指针可以在后续指向不同的对象。
六. 内联函数
1. 概念
以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方把函数内容展开,从而替换对函数的调用,没有函数压栈的开销,内联函数可以提升程序运行的效率。
//定义两个数相加的内联函数
inline int Add(int a, int b)
{return a + b;
}
- 代码很长或者有递归的函数不适宜使用作为内联函数。inline是一种以空间换时间的做法,省去调用函数栈帧的开销。
- inline不建议声明和定义分离,这样会导致链接错误。因为inline既要要被展开,就没有函数地址了,链接就会找不到
2. c++替代宏的方法
- 常量定义 :换用const来修饰
- 函数定义: 换用内联函数
七. nullptr与NULL
NULL 预处理后:0 (可能被定义为字⾯常量0,使用需要类型转换)
nullptr 预处理后:(void*)0 (隐式地转换为指针类型,避免类型转换问题)
故在c++,可以使用nullptr代替NULL传递空指针。
相关文章:

【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)
一. 命名空间 1. 定义 出现的意义:解决各种函数、关键词和类的名称冲突问题。 定义方式:namespace 命名空间的名字 { } (注意!}后面不加;) namespace 是关键词命名空间的…...
uniapp自定义导航栏以及页面加背景
如果想给uniapp的页面加背景图片的话,疯狂度了之后会发现uniapp中背景图片用本地图片不起效果,所以一般用网络路径,之后又会发现,页面如果直接加背景的话有可能会遇到页面内容不够,背景撑不满整个页面,如果…...

MacOS Sonoma(14.x) 大写模式或中文输入法下的英文模式,光标下方永远会出现的CapsLock箭头Icon的去除办法
如图,MacOS Sonoma(14.x) 大写模式或中文输入法下的英文模式下,光标下方永远会出现一个CapsLock箭头Icon。此Icon挡住视野,还容易误触导致切换大小写状态,带来的收益远远小于带来的困扰。 解决办法 打开终端,输入以下…...
C#基础(10)变长参数和参数默认值
前言 作为函数的补充知识点,我们已经学习了ref和out,接下来两节我们继续来讲函数相关的内容。本节则讲解变长参数和参数默认值。 函数语法 关键字:params public void PrintNumbers(params int[] numbers) {for 相关逻辑 } 注意 params…...
Vue转React开发经验分享——hooks写法如何触发react生命周期、如何触发数据更新?
背景:习惯了vue的写法,并且vue2和vue3都比较熟悉,在转react开发中,不停的思考react和vue框架的相似之处,以及vue中的写法在react里怎么替换。本文将组件更新或组件生命周期角度出发聊聊如何使用hooks触发生命周期&…...

算法入门-贪心1
第八部分:贪心 409.最长回文串(简单) 给定一个包含大写字母和小写字母的字符串 s ,返回通过这些字母构造成的最长的回文串 的长度。 在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串…...

element-plus的面包屑组件el-breadcrumb
面包屑组件主要用来显示当页面路径,以及快速返回之前的页面。 涉及2个组件 el-breadcrumb 和el-breadcrumb-item, el-breadcrumb的spearator指定item的分隔符 el-breadcrumb-item的to和replace属性和vue-router的一致,需要结合vue_router一起使用 用法…...
推荐几个网盘资源站给大伙,找资源更方便
夸克网盘在当前已然成为极为主流的网盘之一,其功能体验堪称强大,不仅支持在线解压阅读,磁力离线等功能也十分出色。那么,究竟该如何寻找夸克资源呢?下面,我就来为大家分享几个堪称神级的夸克资源网站。 一、…...

【Qt】Qml界面中嵌入C++ Widget窗口
1. 目的 qml做出的界面漂亮,但是执行效率低,一直想找一个方法实现qml中嵌入c界面。现在从网上找到一个方法,简单试了一下貌似可行,分享一下。 2. 显示效果 3. 代码 3.1 工程结构 3.2 pro文件 需要添加widgets > QT quick …...
Python快速入门 —— 第五节:接口开发
第五节:接口开发 目标: 学习使用Flask框架开发简单的Web接口,实现对学生信息的增删改查,通过HTTP请求与应用交互。 内容: Flask简介: Flask是一个轻量级的Python Web框架,使用简单,扩展性强,适合快速开发Web应用。安装Flask: pip install flask创建Flask应用: fr…...

利用secureCRT向虚拟机发送文件(secureCRT安装使用教程)
链接: secureCRT 链接:https://pan.baidu.com/s/1CvNYzoBbLVkyYNFq7hrT0g 提取码:5974 链接: secureCRT安装使用教程 链接:https://pan.baidu.com/s/1Bbi7SqyJBere8G53BCYL5A 提取码:xjw1...
AI杂七杂八系列(1)——工程篇
1. 远程服务器无法登录问题 2. 内存溢出解决方法 3. Padding 4. try...except...处理异常报错 5. view、expand、repeat、transpose、permute和squeeze、unsqueeze的区别 1. 远程服务器无法登录问题 权限可能是root权限,修改权限 用户权限: sudo c…...

学习大数据DAY58 增量抽取数据表
作业 1 SQL 优化的常见写法有哪些 - 面试经常被问 使用索引:合理创建和使用索引是提高查询效率的关键。索引可以加速数据的检 索速度,但是索引也会占用额外的存储空间,并且在插入、删除和更新操作时会 有额外的开销。 避免全表扫描&…...

HTTPTomcat
HTTP&Tomcat&Servlet 今日目标: 了解JavaWeb开发的技术栈理解HTTP协议和HTTP请求与响应数据的格式掌握Tomcat的使用掌握在IDEA中使用Tomcat插件 1,Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网,也称为万维网(www),…...

Python数据分析-Matplotlib快速入门
一、pyplot 二、绘图 1.绘制x和y的点 2.无线绘图 3.多点 4.默认x点 三、标记 1.标记 2.参考 3.格式化字符串 4.尺寸 5.颜色 四、线条 1.线形 两个都是设置虚线 2.更短的语法 3.线参考 4.线条颜色 5.线宽度 6.多条线 也可以 五、标签 1.为绘图创建标签 2.为绘图设置标题 3…...
重塑在线软件开发新纪元:集成高效安全特性,深度解析与评估支持浏览器在线编程的系统架构设计
目录 案例 【题目】 【问题 1】(13 分) 【问题 2】(12 分) 【答案】 【问题 1】解析 【问题 2】解析 相关推荐 案例 阅读以下关于软件架构设计与评估的叙述,回答问题1和问题2。 【题目】 某公司拟开发一套在线软件开发系统,支持用户通过浏览器…...
【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析
【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】003 - vmlinux.lds 链接脚本文件源码分析》 …...
MongoDB实现高级RAG:Parent-Document检索技术详解
MongoDB实现高级RAG:Parent-Document检索技术详解 引言 在人工智能和自然语言处理领域,检索增强生成(Retrieval-Augmented Generation, RAG)技术正在迅速发展。本文将介绍一种更高级的RAG实现方式:Parent-Document检索。我们将探讨如何使用…...
胡学乱想----前端知识点(css色彩)
1. margin 属性 简写 margin 属性有两个值时,它将 margin-top 和 margin-bottom 设置为第一个值,并将 margin-left 和 margin-right 设置为第二个值 .marker {width: 200px;height: 25px;background-color: red;margin: 10px auto; }2. rgb 属性 CSS 的 rgb 函数接收红色…...
GEE 案例——利用MODIS数据和NDWI指数进行美国五大湖水体计算和时序分析(直方图统计和面积统计)
目录 简介 MODIS数据 代码 结果 简介 利用MODIS数据和NDWI指数进行水体计算和时序分析(直方图统计和面积统计),这里我们统计了2001-2023年的美国五大湖的水域面积变化情况。 MODIS数据 MODIS/061/MOD09A1数据是由美国宇航局(NASA)的Moderate Resolution Imaging Spe…...
Django核心知识点全景解析
引言 本文深入剖析Django核心组件,涵盖数据交换、异步交互、状态管理及安全认证,附完整代码示例和避坑指南! 目录 引言 一、JSON:轻量级数据交换标准 1. 核心特性 2. 标准格式 3. 各语言处理方法 4. 常见错误示例 二、AJA…...

NLP学习路线图(三十):微调策略
在自然语言处理领域,预训练语言模型(如BERT、GPT、T5)已成为基础设施。但如何让这些“通才”模型蜕变为特定任务的“专家”?微调策略正是关键所在。本文将深入剖析七种核心微调技术及其演进逻辑。 一、基础概念:为什么需要微调? 预训练模型在海量语料上学习了通用语言表…...

从 JDK 8 到 JDK 17:Swagger 升级迁移指南
点击上方“程序猿技术大咖”,关注并选择“设为星标” 回复“加群”获取入群讨论资格! 随着 Java 生态向 JDK 17 及 Jakarta EE 的演进,许多项目面临从 JDK 8 升级的挑战,其中 Swagger(API 文档工具)的兼容性…...
C#中Struct与IntPtr转换:实用扩展方法
C#中Struct与IntPtr转换:实用扩展方法 在 C# 编程的世界里,我们常常会遇到需要与非托管代码交互,或者进行一些底层内存操作的场景。这时,IntPtr类型就显得尤为重要,它可以表示一个指针或句柄,用来指向非托…...

RPA+AI:自动化办公机器人开发指南
RPAAI:自动化办公机器人开发指南 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 RPAAI:自动化办公机器人开发指南摘要引言技术融合路径1. 传感器层:多模态数据接入2. 决策层&…...

基于React + FastAPI + LangChain + 通义千问的智能医疗问答系统
📌 文章摘要: 本文详细介绍了如何在前端通过 Fetch 实现与 FastAPI 后端的 流式响应通信,并支持图文多模态数据上传。通过构建 multipart/form-data 请求,配合 ReadableStream 实时读取 AI 回复内容,实现类似 ChatGPT…...

算法练习-回溯
今天开始新的章节,关于算法中回溯法的练习,这部分题目的难度还是比较大的,但是十分锻炼人的思维与思考能力。 处理这类题目首先要注意几个基本点: 1.关于递归出口的设置,这是十分关键的,要避免死循环的产…...

有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
有没有 MariaDB 对应 MySQL CONNECTION_CONTROL 插件 背景 写这篇文章的目的是因为昨晚半夜突然被call起来,有一套系统的mysql数据库启动失败了。尝试了重启服务器也不行。让我协助排查一下问题出在哪。 分析过程 一开始拿到服务器IP地址,就去数据库…...

STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示
接了一个同学的小项目,要实现控制一个实体,控制灯带的亮度为红/绿/蓝/白/黄以及亮度的叠加。 时间要的比较急,要两天实现,因此不能打板,只能采用现有模块拼接。 一. 实施方案 一开始觉得很简单,就是使用五…...

NLP学习路线图(二十七):Transformer编码器/解码器
一、Transformer概览:抛弃循环,拥抱注意力 传统RNN及其变体(如LSTM、GRU)处理序列数据时存在顺序依赖的瓶颈:必须逐个处理序列元素,难以并行计算,且对长程依赖建模能力较弱。Transformer的革命…...