当前位置: 首页 > news >正文

C++入门(未完待续)

1.命名空间
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员
①.普通的命名空间

namespace N1{//命名空间的内容,既可以定义变量,又可以定义函数
int a;
int Add(int left,int right){
return left+right;
}
}

②.命名空间可以嵌套

namespace N1{//命名空间的内容,既可以定义变量,又可以定义函数
int a;
int Add(int left,int right){
return left+right;
}
namespace N3{
int c;
int d;
int sub(int left,int right){
return left-right;
}

}
③.同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间

命名空间的使用
①.加命名空间名称和域作用限定符

int main(){
printf("%d",N::a);
return 0;
}

②.使用using将命名空间中成员引入

using N::b
int main(){
pritnf("%d",N::b);
return 0;
}

③.使用using namespace 命名空间名称引入
using namespace N;

using namespace N;//全部展开,全部授权
using N::add;//部分展开,部分授权

using namespace std;
std是c++标准库的命名空间
2.c++输入/输出
<<流插入运算符

流提取运算符

cout<<"hello world"<<endl;

endl为换行符

cout<<"hello world"<<"\n";

两者效果相同
使用cout标准输出(控制台)和cin标准输入(键盘)时,必须包含头文件以及std标准命名空间
使用c++输入输出更加方便,不需增加数据控制格式,比如整形"%d” 字符"%c"

注意cin的特点,与c语言中gets有些类似,gets是遇到换行符停止,而cin是遇到空格,tab或者换行符作为分隔符的,

char arr[20]={};
cin>>arr;

输入hello world 但由于中间存在空格,故arr这个数组中只有hello,没有world

3.缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
void func(int a=10){
cout<<a<<endl;
}
int main(){
func();//没有传参时,使用参数的默认值
func(10);//传参时,使用指定的实参
}
分类
全缺省参数
void func(int a=10;int b=20;int c=30){}
半缺省参数
void func(int a,int b=20;int c=30){}
注意①.半缺省参数必须从右往左依次来给,不能间隔着给
②.缺省参数不能在函数的声明和定义中同时出现
因为如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用哪个缺省值
声明不给定义给
③.缺省值必须是常量或者全局变量
//正确示例

int x = 3;//全局变量
void func(int a, int b = 2, int c = x)
{cout << a << endl;cout << b << endl;cout << c << endl;
}

4.函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的
形参列表(参数个数类型顺序)必须不同,常用来处理实现功能类似数据类型不同的问题

#include <iostream>
using namespace std;int Add(int x, int y)
{return x + y;
}double Add(double x, double y)
{return x + y;
}
int main()
{cout << Add(0,1) << endl;//打印0+1的结果cout << Add(1.1,2.2) << endl;//打印1.1+2.2的结果return 0;
}

注意:若仅仅只有返回值不同,其他都相同,则不构成函数重载。

c语言与c++类似,都要进行编译和链接两个过程
编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址实在b.o中
链接器看到a.o调用Add,但没有Add的地址,就会到b.o的符号表(符号表就是函数名,变量跟地址的映射)中去找Add的地址,然后链接到一起。面对多个Add函数,每个编译器有自己的修饰规则,在gcc下的修饰规则是:【_Z+函数长度+函数名+类型首字母】。
之所以c语言无法支持重载,是因为C编译器和C++编译器对函数名的修饰不同

所以,返回值的不会构成函数重载,因为修饰规则并不会受返回值的影响。
如果函数名修饰规则带入返回值,返回值能否构成重载?

不能,因为不知道要调用谁
5.引用
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它
引用的变量共用同一块内存空间。
类型& 引用变量名(对象名) = 引用实体;
int a=10;
int&b=a; //相当于给a取了一个别名,给b引用了a,同一个变量取了个名字
b=3;//改变b也就相当于改变a了
引用类型必须和引用实体是同种类型的
引用的特性
①.引用在定义时必须初始化

//正确示例
int a = 10;
int& b = a;//引用在定义时必须初始化
//错误示例
int a = 10;
int &b;//定义时未初始化
b = a;

②.一个变量可以有多个引用

int a = 10;
int& b = a;
int& c = a;
int& d = a;

③.引用一旦引用了一个实体,就不能再引用其他实体(c++的引用不能改变指向)

int a = 10;
int& b = a;
int c = 20;
b = c;//错误,b已经引用了a,就不能在引用c
实际效果变为,b的值变为20,而因为a与b相同,故a的值也变成了20

常引用
在引用的过程中,权限可以平移,可以缩小,但不能放大

const int a=10;
int&b=a;

会出现错误,相当于权限的放大,因为在这里a为常量,如果用int&b=a;那么,b可以修改,但a不可以修改

const int&ra=a;

相当于权限的平移,不会出错

int&b=10;

会出现错误,b为常量,需要改为

const int&b=10;
int i=0;
double&d=i;

会出现错误,因为发生类型转换时会产生一个double类型临时变量,临时变量具有常性
(int到double存在隐式类型的提升,而在提升的过程中系统会创建一个常量区来存放a类型提升后的结果)
需要改为

int i=0;
const double&d=i;
int func(){
int a=0;
return a;
}
int&ret=func();

会出现问题,因为func的返回值是a的一份临时拷贝,临时变量具有常性
需改成

const int&ret=func();

引用的使用场景
①.做参数

void swap(int&left,int&right){
int temp=left;
left=right;
right=temp;
}

②.做返回值
当然引用也能做返回值,但是要特别注意,我们返回的数据不能是函数内部创建的普通局部变量,因为在函数内部定义的普通的局部变量会随着函数调用的结束而被销毁。我们返回的数据必须是被static修饰或者是动态开辟的或者是全局变量等不会随着函数调用的结束而被销毁的数据。

int& count(){int n=0;n++;return n;
} 
int main(){int ret=count();return 0;
}

count函数返回n的别名,但是n已经销毁,如果栈帧没有清楚,那么结果为1,否则结果为随机值

#include<iostream>
using namespace std;
int&Add(int a,int b){int c=a+b;return c;
}
int main(){int&ans=Add(1,2);Add(3,4);cout<<ans<<endl;
}

但如果再加上一句cout<<ans<<endl;打印出的结果将变为随机值
因为在第一次调用cout<<ans<<endl时,函数传参建立栈帧,调用完后被覆盖,第二次调用时已经被覆盖,为随机值

#include<iostream>
using namespace std;
int& Add(int a, int b)
{static int c = a + b;return c;
}int main()
{int& ans = Add(1,2);Add(3, 4);cout << ans << endl;
}

为什么会出现随机值,因为你在函数里定义的变量是临时变量,出了函数函数是会销毁的,这时它就随机指向内存中的一块空间了。所以在引用做函数返回值时最好还是给在函数中定义的变量加上static。加上static后,结果将变为3。
因为第二次调用Add函数时,static int c=a+b;并不会执行,而是直接return c;
但如果将该函数修改为

int& Add(int a, int b)
{static int c ;c=a+b;return c;
}

总结:
传引用传参(任何时候都可以)
①.提高效率
②.输出型参数(形参的修改影响实参)
传引用返回(出了函数作用域对象还在才可以用)
①.提高效率
②.

顺序表查找和修改可以用一个函数来解决

int& SLAT(struct seqlist&ps,int i){
return ps.a[i];
}

想要修改SLAT(s,0)=1;

相关文章:

C++入门(未完待续)

1.命名空间 使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污染 定义命名空间&#xff0c;需要使用到namespace关键字&#xff0c;后面跟命名空间的名字&#xff0c;然后接一对{}即可&#xff0c;{}中即为命名空间的成员 ①.普通的命名空间 n…...

Python爬虫学习笔记(四)————XPath解析

目录 0.xpath最新下载地址和安装教程 1.xpath安装 2.xpath基本使用 3.xpath基本语法 4.实例 &#xff08;1&#xff09;xpath解析本地文件 &#xff08;2&#xff09;xpath解析服务器响应的数据 ①获取百度网站的“百度一下”四个字 ②获取站长素材网站情侣图片前十页的…...

知识图谱推理的学习逻辑规则(上)

知识图谱推理的学习逻辑规则 摘要介绍相关工作模型知识图谱推理逻辑规则概率形式化参数化优化 实验实验设置实验结果 结论 原文&#xff1a; 摘要 本文研究了在知识图谱上进行推理的学习逻辑规则。 逻辑规则用于预测时提供了可解释性并且可以推广到其他任务中&#xff0c;因…...

【从零开始学习C++ | 第二十一篇】C++新增特性 (上)

目录 前言&#xff1a; 委托构造函数&#xff1a; 类内初始化&#xff1a; 空指针&#xff1a; 枚举类&#xff1a; 总结&#xff1a; 前言&#xff1a; C的学习难度大&#xff0c;内容繁多。因此我们要及时掌握C的各种特性&#xff0c;因此我们更新本篇文章&#xff0c;向…...

你真的会用async和await么?

背景 背景就是遇到了一个比较烦人的模块&#xff0c;里面的涉及到了大量的async 和 awiat。发现大多人对这个语法糖一知半解&#xff0c;然后大量的滥用&#xff0c;整理一下 async 前置知识&#xff1a; Promise.resolve(foo) new Promise(resolve > resolve(foo)…...

vscode远程连接提示:过程试图写入的管道不存在(删除C:\Users\<用户名>\.ssh\known_hosts然后重新连接)

文章目录 复现过程原因解决方法总结 复现过程 我是在windows上用vscode远程连接到我的ubuntu虚拟机上&#xff0c;后来我的虚拟机出了点问题&#xff0c;我把它回退了&#xff0c;然后再连接就出现了这个问题 原因 本地的known_hosts文件记录服务器信息与现服务器的信息冲突了…...

【005】基于深度学习的图像语 通信系统

摘要 语义通信是一种新颖的通信方式&#xff0c;可通过传输数据的语义信息提高带宽效率。提出一种用于无线图像传输的系统。该系统基于深度学习技术开发并以端到端&#xff08;E2E&#xff09;的方式进行训练。利用深度学习实现语义特征的提取和重建&#xff0c;在发送端提取信…...

基于ssm的社区生活超市的设计与实现

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战。专注于计算机毕设开发、定制、文档编写指导等&#xff0c;对软件开发具有浓厚的兴趣&#xff0c;工作之余喜欢钻研技术&#xff0c;关注IT技术的发展趋势&#xff0c;感谢大家的关注与支持。 技术交流和部署相关看文章…...

长短期记忆网络(LSTM)原理解析

长短期记忆网络&#xff08;Long Short-Term Memory&#xff0c;简称LSTM&#xff09;是一种常用于处理序列数据的深度学习模型。它在循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;的基础上进行了改进&#xff0c;旨在解决传统RNN中的梯度消失…...

vscode debug的方式

在.vscode文件夹下建立launch.json 例子1&#xff1a;调试python 来自 https://github.com/chunleili/tiPBD/tree/amg {"version": "0.2.0","configurations": [{"name": "hpbd 5 5","type": "python&quo…...

微信加粉计数器后台开发

后台包括管理后台与代理后台两部分 管理后台 管理后台自带网络验证卡密系统,一个后台可以完成对Pc端的全部对接,可以自定义修改分组名称 分享等等代理后台 分享页 调用示例 <?php$request new HttpRequest(); $request->setUrl(http://xxxxxxx/api); $request->…...

黑客是什么?想成为黑客需要学习什么?

什么是黑客 在《黑客辞典》里有不少关于“黑客”的定义, 大多和“精于技术”或“乐于解决问题并超越极限”之类的形容相关。然而&#xff0c;若你想知道如何成为一名黑客&#xff0c;只要牢记两点即可。 这是一个社区和一种共享文化&#xff0c;可追溯到那群数十年前使…...

iOS中__attribute__的使用

通过__attribute编译期指令将数据注册至Mach-O指定段的section&#xff0c;可以提供更灵活的注册方式&#xff0c;避免了非必要依赖。通过这种方式不仅仅能够在任何地方注册string&#xff0c;甚至可以注册C函数。 下面的库提供了注册和读取内容的简单方式&#xff0c;主要支持…...

腾讯、飞书等在线表格自动化编辑--python

编辑在线表格 一 目的二 实现效果三 实现过程简介1、本地操作表格之后进入导入在线文档2、直接操作在线文档 四 实现步骤讲解1、实现方法的选择2、导入类库3、设置浏览器代理直接操作已打开浏览器4、在线文档登录5、在线文档表格数据操作6、行数不够自动添加行数 五 代码实现小…...

开源库nlohmann json使用备忘

nlohmann/json是一个用于解析JSON的开源C库&#xff0c;口碑一流&#xff0c;无需额外安装其他第三方库&#xff0c;还支持单个头文件模式&#xff0c;使用起来非常方便直观。 1. 编译 从官网https://github.com/nlohmann/json的Release页面下载单个json.hpp即可直接使用&…...

语音识别开源框架 openAI-whisper

Whisper 是一种通用的语音识别模型。 它是OpenAI于2022年9月份开源的在各种音频的大型数据集上训练的语音识别模型&#xff0c;也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 GitHub - yeyupiaoling/Whisper-Finetune: 微调Whisper语音识别模型和加速推理…...

php做的中秋博饼游戏之绘制骰子图案功能示例

先看代码 header(Content-Type:image/png); $img imagecreatetruecolor(200, 200); $white imagecolorallocate($img, 255, 255, 255); $grey imagecolorallocate($img, 100, 100, 100); $blue imagecolorallocate($img, 0, 102, 255); $red imagecolorallocate($img, …...

erlang 虚拟机优化参数

sbwt none 将CPU忙等待关闭将有助于降低系统显示的CPU使用率&#xff0c;因为开启了忙等待的BEAM&#xff0c;CPU负载并不代表真实的工作情况&#xff1b; K true 开启epoll IO模型 swt low Sets scheduler wakeup threshold. Defaults to medium. The thresh…...

网络安全能力成熟度模型介绍

一、概述 经过多年网络安全工作&#xff0c;一直缺乏网络安全的整体视角&#xff0c;网络安全的全貌到底是什么&#xff0c;一直挺迷惑的。目前网络安全的分类和厂家非常多&#xff0c;而且每年还会冒出来不少新的产品。但这些产品感觉还是像盲人摸象&#xff0c;只看到网络安…...

python爬虫试手

同事让帮忙在某个网站爬点数据&#xff0c;首次尝试爬虫&#xff0c;遇到的问题及解决思路记录下。 大体需求是需要爬取详情页内的信息&#xff0c;详情页有一定格式规律&#xff0c;但是详情页需要从列表页跳入&#xff0c;列表页中的每一条记录需要鼠标悬停才会弹出跳转链接…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...