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

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

高分辨率图像合成归一化流扩展
大家读完觉得有帮助记得关注和点赞!!! 1 摘要 我们提出了STARFlow,一种基于归一化流的可扩展生成模型,它在高分辨率图像合成方面取得了强大的性能。STARFlow的主要构建块是Transformer自回归流(TARFlow&am…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...