☺初识c++(语法篇)☺
目录
一·命名空间(namespace):
二·cout与cin简述:
三·缺省参数:
四·函数重载:
五·引用:
六·内联函数:
七·c++中的nullptr简述:
一·命名空间(namespace):
namespace ns {int t = 5;
}//习惯写法:namespace+名字,注:末尾无;
这里相当于命名空间域;访问的时候要ns::+内部的量
对于c++域的理解:可分为四大域:函数局部域,全局域,命名空间域,类域。
其中前两个影响编译逻辑和生命周期,后两者不影响。
对于命名空间特点:
首先它是可以嵌套的:
namespace ns {int i = 10;int a = 10;namespace ne {int a = 2;//命名空间的嵌套}
}
这时如果访问ne内的a:可以ns::ne::a;或者可以不完全展开即 using namespace ns::ne。
还有一个就是多文件定义同一个命名空间它会自动合并如:
在头文件中定义一个ns命名空间,在cpp中也存在ns命名空间,同时在cpp调用就可以用到头文件中的ns。
对于standard 命名空间,在iostream库里存在的cin cout 就定义在std这个命名空间里。
二·cout与cin简述:
cin输入的数据自动识别为字符型,cout输出也是类同。
前者配合>>后者配合<<,由于是二元操作符,故只能是两个操作数即里面要么是变量自动识别,要么是字符串。
结合endl(end line ):都是存在于iostream库中的namespace std,故可以对它展开或者std::来使用。
int k= 10;
int e = 0;
int main() {std::cout << "k是" << k<< endl;std::cin >> e >> k;std::cout << "k是" << k << endl;std::cout << "e是" << e << endl;}
为了提高io效率,可以在程序中加入:
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
三·缺省参数:
顾名思义,就是对于函数有的参数没有的时候可以去固定值,也可以输入:
大致就是要从函数所有参数的右边开始缺省,到左边,但是不能跳跃,当传参的时候省略的可传可不传。
using namespace std;
namespace hs {int Func(int a, int b, int c = 10) {return a + b + c;}}
#if 0
int main() {cout << hs::Func(1, 2) << endl;}
#endif
这里由于为给传参,故用默认的即输出13。
四·函数重载:
即重载在同一作用域下,参数个数不同或者类型不同而函数名相同可以构成重载。通过调用函数的时候传参个数或者类型来取决调用哪个函数。
如:
using namespace std;
namespace hs {int Func(int a, int b, int c = 10) {return a + b + c;}double Func(double a, int b, int c = 11) {return a + b + c;}
}
#if 0
int main() {cout << hs::Func(1.1, 2) << endl;}
#endif
这里调用的就是double类型的Func。(参数类型不同)
using namespace std;
namespace hs {int Func(int a, int b) {return a + b ;}int Func(int a, int b, int c = 11) {return a + b + c;}
}
#if 0
int main() {cout << hs::Func(1, 2) << endl;}
#endif
这里调用的就是第一个Func。(参数个数不同),当然,也可以是参数顺序不同等等。
而函数重载是为了能调用的时候根据输入区分开不同的函数,故当只有返回值不同时不能作为重载条件:
void fxx()
{}int fxx()
{return 0;
}
上面这样当调用的时候编译器无法区分。
void f1 ()
{
cout << "f()" << endl;
}
void f1 ( int a = 10)
{
cout << "f(int a)" << endl;
}//由于参数是不同的,可以构成重载,但是调用的时候如果不输入,编译器无法区分调哪一个。
五·引用:
即类型&引⽤别名=引⽤对象
相当于给它取了一个新的名字,但还是同一块内存区域,即地址不变,可以理解为改变的时候类似于指针操作。
因此就可以换一种方式交换两个数:
namespace yy {int c = 10;int& b = c;namespace jh {int m = 1;int n = 2;void swap(int& a, int& b) {int tmp = a;a = b;b = tmp;}}}
using namespace yy::jh;
#if 0
int main() {cin >> yy::c;cout << &yy::b <<'\n'<< & yy::c << endl;cout << m <<" "<< n << endl;swap(m, n);cout << m << " " << n << endl;
}
#endif
这里通过这个引用把m n的值交换了,但m n这块地址没有变,通过m n找到对应的地址把里面的数据改变。(因为a,b是m n的别名故改变a b即改变m n) 。
这里注意一旦引用实体,不能再引用其他:
int main() {int a = 10;int& b = a;int d = 11;b = d;cout << "b" <<&b<<" "<<"a" << &a << " " << "d" << &d << endl;return 0;
}
这里可以看出,a b还是同一块地址,b指向的地址里数据只是对d数据的一次拷贝,而不是让b这个实体再次引用d。
const引用:对于权限引用:范围可以缩小,可以等同,但不能放大:
即:
const int a=10;
const int &b=a;//等同int c=10;
const int& d=c;//缩小
这里虽然地址是同一个,但访问权限不同。
再看着一个例子:
const int a=10;
int d=a;//这里并非扩大访问,只是把a值copy给d,两者地址不同
下面引出临对象:所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象。
而当在c++中经常会出现,那么把它就要当成常性对待,不可修改故用const修饰。
int a=10;int b=1;
const int &c=(a+b);
//这里a+b就是临时对象
再比如隐式类型转化出现的临时对象:
double d = 3.14;
int i = d;
const int& ra = d;
cout << i << " " << ra << endl;
六·内联函数:
即用inline修饰的函数,设计出来代替宏:
而宏:采用直接替换,不开辟空间,但效率慢。
普通函数:开辟多余空间,即建立栈帧,效率高。
而内联函数结合了这两点:
即当使用内联函数,如果遇到短小函数,不复杂的则编译器按照宏的方式去直接替换;但是遇到比如有递归等,就会按照函数方式直接展开建立栈帧去执行如:
namespace nl{inline int add(int& a, int &b) {return a + b;}inline int Add(int a, int b) {if (a + b > 10) {return a + b;}return Add(a+3,b+3)+1;}
}
int main() {int m = 1, n = 2;cout << nl::add(m, n) << endl;//这里由于短小函数,故采用类似宏的直接替换。cout << nl::Add(m, n) << endl;//这里由于出现了递归故采用直接展开即开辟一定空间。return 0;
}
再如c++库里面swap函数就用的inline修饰的内联函数;
适用范围:频繁调用的短小函数(非递归)。
七·c++中的nullptr简述:
C++11中引⼊nullptr,nullptr是⼀个特殊的关键字,nullptr是⼀种特殊类型的字⾯量,它可以转换 成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被 隐式地转换为指针类型,⽽不能被转换为整数类型。类似c中的NULL。
void f(int x)
{cout << "f(int x)" << endl;
}
void f(int* ptr)
{cout << "f(int* ptr)" << endl;
}int main() {f(0);f(NULL);f(nullptr);return 0;}
这里对于c语言可能NULL可以这样,但是c++会直接识别为0;故在这里c++对空指针用nullptr。
相关文章:

☺初识c++(语法篇)☺
目录 一命名空间(namespace): 二cout与cin简述: 三缺省参数: 四函数重载: 五引用: 六内联函数: 七c中的nullptr简述: 一命名空间(namespace)࿱…...

process.env 管理 Vue 项目的环境变量(Vue项目中环境变量的配置及调用)
简述:在构建 Vue 应用时,管理配置是开发中的一个重要部分。不同的环境(如开发、测试和生产)往往需要不同的配置,例如 API、 基础 URL、第三方服务的密钥等。使用环境变量可以帮助我们更好地管理这些配置。这里将介绍如…...
算法工程师第六天(● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结 )
参考文献 代码随想录 一、四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#…...
笔记:Newtonsoft.Json 自定义一个根据typeconverter转换的JsonConverter
在 Newtonsoft.Json 中创建一个根据 TypeConverter 转换的 JsonConverter 允许你在序列化和反序列化过程中利用 .NET 的 TypeConverter 机制。这种方式特别有用,当你想要为不直接支持 JSON 序列化的类型提供自定义的序列化逻辑时,比如第三方库中的类型或…...

第241题| 确定极限中参数问题 | 武忠祥老师每日一题
解题思路:确定极限中的参数的方法是求这个极限;求极限根据类型选方法。 形可以用到三种方法:洛必达,等价,泰勒。 先观察题目,将看成一个整体,同时,并令,整理之后如下: 这里也要想办…...

线程池【开发实践】
文章目录 一、为什么要用线程池1.1 单线程的问题1.2 手动创建多线程的问题1.3 线程池的作用(优点)1.4 线程池的使用场景 二、线程池的基础知识2.1 线程池的核心组件2.2 JUC中的线程池架构2.3 线程池的配置参数2.4 线程池常见的拒绝策略(可自定…...

论文辅助笔记:ST-LLM
1 时间嵌入 2 PFA(Partial Frozen Architecture) 3 ST_LLM 3.1 初始化 3.2 forward...

加入运动健康数据开放平台,共赢鸿蒙未来
HarmonyOS SDK运动健康服务(Health Service Kit)是为华为生态应用打造的基于华为帐号和用户授权的运动健康数据开放平台。在获取用户授权后,开发者可以使用运动健康服务提供的开放能力获取运动健康数据,基于多种类型数据构建运动健…...

企业化运维(7)_Zabbix企业级监控平台
官网:Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution ###1.Zabbix部署### (1)zabbix安装 安装源 修改安装路径为清华镜像 [rootserver1 zabbix]# cd /etc/yum.repos.d/ [rootserver1 yum.repos.d]# vim zabbix.r…...

CTF php RCE (一)
0x01 引言 首先进入题目 应该是大部分都是一段白盒PHP审计,然后我们为了命令执行,绕过或者是钻空子等等操作,来拿到flag 0x02 基础 0x01 传参方式 这里有两个工具,hackbar和burpsuite,这两个工具非常实用 大家可以自己Googl…...

Proteus + Keil单片机仿真教程(五)多位LED数码管的静态显示
Proteus + Keil单片机仿真教程(五)多位LED数码管 上一章节讲解了单个数码管的静态和动态显示,这一章节将对多个数码管的静态显示进行学习,本章节主要难点: 1.锁存器的理解和使用; 2.多个数码管的接线封装方式; 3.Proteus 快速接头的使用。 第一个多位数码管示例 元件…...

【Linux】网络新兵连
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 引言 在上一篇博客中,我们简单的介绍了一些Linux网络一些比较基本的概念。本篇博客我们将开始正式学习Linux网络套接字的内容,那么我们开始吧! 1.网络中的地址管理 大家一…...

基于STM32的智能加湿器
1.简介 基于STM32的加湿器发展前景非常乐观,这主要得益于其在技术、市场需求、应用场景以及政策支持等多方面的优势。STM32微控制器具备强大的处理能力和丰富的外设接口,能够实现精确的湿度监测和智能化控制。基于STM32的加湿器可以根据环境湿度自动调节…...
ubuntu 如何解压tar
在Ubuntu中解压.tar文件,可以使用tar命令。以下是解压.tar文件的命令: tar -xvf file.tar 解释: x 表示解压 v 表示显示过程中的详细信息(可选) f 表示后面跟文件名 这将在当前目录下解压file.tar文件的内容。如果…...
C++ 算法——二分查找
如果要你在一个升序序列中查找一个值的位置,你是否还会傻乎乎的用下面这个 O ( n ) \mathcal O(n) O(n) 的代码暴力查找,如果是,我告诉你,其实根本不用这么做。 int find(int a[],int n,int k) {for(int i0;i<n;i) if(a[i]k)…...

【自动驾驶仿真在做什么——初学者总结(陆续补充)】
文章目录 基础概念自动驾驶级别再稍提一下ODD是什么? 自动驾驶仿真分类软件在环仿真硬件仿真 仿真究竟难在哪?关于lidar和radar区别一些名词解释 最近也是学习自动驾驶仿真相关知识,习惯去总结一下,方便自己回顾和总结,…...
探索HTML5的设计原则:引领Web开发的未来方向
随着互联网的飞速发展,HTML5作为Web技术的核心标准之一,不仅极大地丰富了网页的表现力和交互性,还推动了Web应用向更加动态、高效、安全的方向迈进。HTML5的设计原则,体现了对用户体验、内容可访问性、跨平台兼容性以及未来可扩展…...

力扣喜刷刷--day1
1.无重复字符的最长子串 知识点:滑动窗口 基本概念 窗口:窗口是一个连续的子序列,可以是固定长度或可变长度。滑动:窗口在数据序列上移动,可以是向左或向右。边界:窗口的起始和结束位置。 应用场景 字符…...
配置linux的yum镜像为阿里镜像源
1.备份当前的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base.repo 到/etc/yum.repos.d wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 3.清空并生成缓存 yum clean …...
react使用markdown进行展示
有一些文档非常长,但是又要挨个设置样式,直接用 组件库 - marked 注意文档要放在public下才能读取。但非常方便 import { marked, Renderer } from "marked".....const [html, setHtml] useState<any>("")const renderer:…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...