C/C++ C++入门
个人主页:仍有未知等待探索-CSDN博客
专题分栏:C++_仍有未知等待探索的博客-CSDN博客
目录
一、C++关键字
二、命名空间
1、区别
1. C语言
编辑 2. C++
2、命名空间定义
3、命名空间的使用
三、C++输入&输出
四、缺省参数
五、函数重载
六、引用
使用注意:
引用和指针的区别:
引用的使用:
七、内联函数
八、auto关键字(C++11)
九、基于范围的for循环(C++11)
十、指针空值---nullptr(C++11)
一、C++关键字
下列的关键字有的我们在C语言中就已经见过了,而有些比较陌生,不过不用慌,这些现在不用死记,以后多用就记住了。
二、命名空间
在C/C++中,变量,函数和类的名称都存在于全局作用域中,而C++为了避免这样的命名冲突和名字污染,添加了命名空间域。(关键字:namespace)
全局作用域和命名空间域就类似于这样(如果理解不对,请指教),相当于单独开了一个空间给命名空间域。
1、区别
1. C语言
在没有命名空间的C语言语法里这样写就是错误的,报错信息可以看见:rand重定义。
2. C++
定义了一个命名空间,在命名空间里面定义了一个rand变量,这样的话就不会和库函数里面的rand函数产生命名冲突。(:: 这个符号作用域限定符)
2、命名空间定义
#include <iostream>// 正常定义
namespace cpp1
{int a = 1;int b = 2;int Add(int a, int b){return a + b;}
}
// 嵌套定义
namespace cpp2
{int a = 1;int b = 2;int Add(int a, int b){return a + b;}namespace cpp3{int a = 1;int b = 2;int Add(int a, int b){return a + b;}}
}// 一个工程里面允许定义多个相同的命名空间——编译器最后会合成同一个命名空间中。int main()
{// 打印cpp2里面的函数printf("%d\n", cpp2::Add(1, 2));// 打印cpp2里面的cpp3里面的函数printf("%d\n", cpp2::cpp3::Add(3, 4));return 0;
}
3、命名空间的使用
#include <iostream>namespace cpp
{int a = 1;int b = 2;int Add(int a, int b){return a + b;}
}
// 将该命名空间进行展开
// using namespace cpp;// 将命名空间域里面的变量或者函数进行个别展开
using cpp::a;
int main()
{// 用命名空间名称 + 作用域作用符// printf("%d\n", cpp::Add(1, 2));// 用using + 命名空间名称,将该命名空间进行展开// using namespace cpp;// 将命名空间域里面的变量或者函数进行个别展开// std::cout << a << std::endl;// 该语句有错误————变量b未定义// std::cout << b << std::endl;return 0;
}
三、C++输入&输出
// 如果是自己做题, 可以将std这个命名空间域进行展开 using namespace std;// 如果是写工程的话,不建议展开
#include <iostream>int main()
{int a = 10;// C++没有占位符(格式输出符 : %d ···)std::cin >> a; // 输入std::cout << a;// 输出return 0;
}
四、缺省参数
说白了就是函数传参的时候,可以进行默认传值(如果没有传值的话)。
缺省参数的初始化的顺序是有要求的,必须是连续的,必须从最右侧开始读入。
#include <iostream>namespace C
{// C语言写法int Add(int a, int b){return a + b;}
}namespace Cpp
{// C++缺省参数写法int Add(int a = 5, int b = 0){return a + b;}// 也可以只缺省一个参数(数目没有要求)int sub(int a, int b = 2){return a * b;}
}int main()
{// endl 的作用是 插入一个换行符,并且刷新输出流std::cout << C::Add(1, 2) << std::endl; std::cout << Cpp::Add(1, 2) << std::endl;std::cout << Cpp::Add(1) << std::endl;std::cout << Cpp::Add() << std::endl;std::cout << Cpp::Add(1) << std::endl;return 0;
}
五、函数重载
函数重载的意义是,允许有多个功能类似的同名函数的存在。(就比如说实现一个加法函数,可以有整型的加法函数,也可以有浮点型的加法函数等等,实现的都是加法的功能,如果要用函数名进行区别的话,比较不友好)
要求:函数的参数类型、参数类型顺序、个数不完全一样。
六、引用
引用:就相当于是给一个变量起了一个别名。
用值作为参数进行传递,形参会形成一份临时拷贝,效率低下。(建议用引用作为形参的类型)
使用注意:
1:用引用的时候,必须进行初始化。
2:引用类型必须和引用实体的类型一样。
3:变量引用完之后不能进行修改。
int a = 10; int b = 4; int& c = a; // 不允许对c进行修改指向的操作 // c = b;
4:一个变量可以多次进行引用。
5:常引用:const int &a=b就相当于 const int * const a=b。不仅仅是a这个地址不可修改,而且其指向的内存空间也不可修改。
引用和指针的区别:
- 在语法层面,引用不是定义一个新的变量,而是给已有的变量去了一个别名,编译器不会为引用变量开辟空间,引用和引用的变量公用一个空间。
- 在底层层面,引用的底层也是用指针实现的,也开辟了空间。
- 指针是新开辟了一个空间,来专门的存变量的地址。
- 没有空引用,但有空指针。
- 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32 位平台下占4个字节)
- 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
- 没有多级引用,有多级指针。
- 引用不需要自己进行解引用,指针需要。
- 引用比指针更安全(因为没有野指针,空指针的问题)。
引用的使用:
1、做参数:见下面代码。
2、做函数返回值:1)不能返回局部变量的引用。
2)不能返回函数内部new分配的内存的引用。
3)可以返回类成员的引用,但最好是const。
#include <iostream>
using namespace std;// 如果是学C语言的时候,我们写交换函数是传的变量的地址,通过对变量地址的解引用来操作变量的内容。
// 现在我们可以用一个引用类型进行接收,相当于我们还是对原来的变量进行修改(可以从例子看出来,取别名可以是相同的)
void swap(int&a, int &b)
{a = a ^ b;b = a ^ b;a = a ^ b;
}int main()
{int a = 5, b = 6;swap(a, b);cout << a << " " << b;return 0;
}
#include <iostream>
using namespace std;int main()
{int a = 10;int& b = a;b = 3;cout << a;return 0;
}
七、内联函数
1、如果内联函数的代码量比较大的时候,不建议用内联函数,
2、inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址 了,链接就会找不到。
内联函数其实对标的就是C语言中的宏函数。
如果让你写一个宏函数的话,可能会漏洞百出,比较的麻烦。
// 写一个加法的宏函数// 错误写法一
#define Add(a, b) a + b// 错误写法二
#define Add(a, b) a + b;// 错误写法三
#define Add(a, b) (a + b)// 正确写法
#define Add(a, b) ((a) + (b))
而为了解决这样的问题,C++引入了一个内联函数的语法,和宏函数一样,在编译时,编译器会在调用的地方进行展开。
#include <iostream>
using namespace std;// 内联函数在函数的基础上加上一个inline的关键字。
inline int Add(int a, int b)
{return a + b;
}int main()
{cout << Add(1, 2);return 0;
}
八、auto关键字(C++11)
使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto 的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编 译期会将auto替换为变量实际的类型。
auto不能用来推导数组的类型。
// auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&
// 在同一行定义多个变量,当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量
int main()
{int x = 10;auto a = &x;auto* b = &x;auto& c = x;cout << typeid(a).name() << endl;cout << typeid(b).name() << endl;cout << typeid(c).name() << endl;*a = 20;*b = 30;c = 40;return 0;
}
九、基于范围的for循环(C++11)
#include <iostream>
using namespace std;int main()
{int a[] = {1, 2, 3};for (auto x : a){cout << x << " ";}return 0;
}
十、指针空值---nullptr(C++11)
1、在使用nullptr表示指针空值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入 的。
2、在C++11中,sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。
3. 为了提高代码的健壮性,在后续表示指针空值时建议最好使用nullptr。
谢谢大家!
相关文章:

C/C++ C++入门
个人主页:仍有未知等待探索-CSDN博客 专题分栏:C_仍有未知等待探索的博客-CSDN博客 目录 一、C关键字 二、命名空间 1、区别 1. C语言 编辑 2. C 2、命名空间定义 3、命名空间的使用 三、C输入&输出 四、缺省参数 五、函数重载 六、引用 …...
【后端】乐观锁和悲观锁
前置知识点 锁:一种确保数据安全的机制和手段。 在多个线程修改共享变量时,我们可以对修改操作进行加锁。当多个用户修改表中的同一数据时,我们可以对该行数据进行加锁(行锁)。锁是用于控制多个操作在并发环境下按顺…...
软件工程知识梳理1-可行性研究
目的:确定问题是否值得去解决。就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也即是在较高层次上以较抽象的方式进行系统分析和设计的过程。 考察点:技术可…...

2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码
2024美国大学生数学建模E题财产保险的可持续模型详解思路具体代码 前言 很快啊!啪的一下拿到题目就开始做题!简单介绍一下我自己:博主专注建模五年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建…...
pytorch nearest upsample整数型tensor
在用 torch.nn.Upsample 给分割 label 上采样时报错:RuntimeError: "upsample_nearest2d_out_frame" not implemented for Long。 参考 [1-3],用 [3] 给出的实现。稍微扩展一下,支持 h、w 用不同的 scale factor,并测试…...

MySQL的SQL MODE
目录 举例: --常见SQL mode --mysql8 sql_mode 官方文档 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html --查看全局的SQL MODE select global.sql_mode; --查看当前会话的SQL MODE select session.sql_mode; --运行时修改全局的SQL mode set gl…...
GO EASY 框架 之 NET 05
目录 1、Overview 2、Agent接口源码 3、收发消息 4、AgentHandle接收函数 5、conns.Conn接口 1、Overview 名称:agent.Agent 网络链接 接口; DESC:网络链接,服务端与客户端通信媒介; 封装:进一步封…...

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法
【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法 引言 在应用开发过程中,将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法,包括 Xcode、Application Loader、altool、Appuploader以及Transport…...

面试经典 150 题 -- 滑动窗口 (总结)
面试经典150题链接 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 209 . 长度最小的子数组 思路 : 滑动窗口的思想,取ij0,向后遍历j,记录前缀和[l,r]为s,如果s>target,那么左端点向右移动,直到s…...
JDK8对List对象根据属性排序
文章目录 JDK8对List对象根据属性排序1. 被排序字段为null或者空时候报错2. 使用Stream流排序2.1 根据name升序2.2 根据name升序,score降序 3. 使用Collections排序3.1 根据name升序3.2 根据name升序,score降序 4. 完整的demo JDK8对List对象根据属性排序…...

【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!
【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 本人是计算机博士,拥有10年网球球龄,2023年的温网决赛,熬夜到半夜全称观看完了直播,对于网球规则、比赛的数据非常熟悉,这个…...
python的Flask生产环境部署说明照做成功
最近刚好在我的Linux服务器上部署一个Web服务, 使用了python的Flask框架, 因此本文主要介绍flask在linux环境上的部署。 Flask 是一个轻量级的 Python Web 框架,非常适合快速开发小型到中型的 Web 应用。然而,Flask 自带的服务器通常是用于开发目的&…...
EXCEL VBA调用百度api识别身份证
EXCEL VBA调用百度api识别身份证 Sub BC_识别身份证()Dim SHD, SHX As WorksheetDim AppKey, SecretKey, Token, PathY As StringDim jSon, JSonA, WithHttp As ObjectDim Pic, oDom, oW, jsCode, paramsDim ARX, BRX, DRX, ERX, ZADDim StrText, StrUrl As StringDim StrA, S…...

【每日一题】7.LeetCode——合并两个有序链表
📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢…...

【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)
🙋♂️【零基础学习CAPL】系列💁♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.CAPL实现4.1.函数展示4.2.全量报文展示5.效果1.概述 本章主要介绍使用CAPL和Panel在按下按钮时发送周期性CAN报文。 本章主要在“【零基础学习CAPL】——CAN报文的发送(配合P…...

六、Nacos源码系列:Nacos健康检查
目录 一、简介 二、健康检查流程 2.1、健康检查 2.2、客户端释放连接事件 2.3、客户端断开连接事件 2.4、小结 2.5、总结图 三、服务剔除 一、简介 Nacos作为注册中心不止提供了服务注册和服务发现的功能,还提供了服务可用性检测的功能,在Nacos…...
2024美赛C题思路/代码:网球中的动量
美赛直播b站,提前关注:川川菜鸟 美赛辅导预定:美赛服务 去年美赛C题:2023美赛C题 题目翻译 背景 在2023年温布尔登男子单打决赛中,20岁的西班牙新星阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自201…...
ConcurrentHashMap原理详解(太细了)
一、什么是ConcurrentHashMap ConcurrentHashMap和HashMap一样,是一个存放键值对的容器。使用hash算法来获取值的地址,因此时间复杂度是O(1)。查询非常快。 同时,ConcurrentHashMap是线程安全的HashMap。专门用于多线程环境。 二、Concurre…...

EasyExcel根据对应的实体类模板完成多个sheet的写入与读取
1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…...

在企业数字化转型过程中,IT运维发挥着怎样的价值?
IT运维软件在企业数字化转型中发挥着重要的价值。从效率、稳定性、安全性和资源利用率以及数据分析决策支持都有巨大的提升。 提高效率 利用自动化巡检功能,实时或定时进行系统巡检,减少人力巡检的繁琐和低效,避免手动操作的失误,…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...