【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…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
【R语言编程——数据调用】
这里写自定义目录标题 可用库及数据集外部数据导入方法查看数据集信息 在R语言中,有多个库支持调用内置数据集或外部数据,包括studentdata等教学或示例数据集。以下是常见的库和方法: 可用库及数据集 openintro库 该库包含多个教学数据集&a…...
