C++重点基础知识汇总大全

文章目录

  • 一些基础知识点
  • 指针和引用


一些基础知识点

1、十进制的数字比较长的时候,可以加'方便阅读到底是几位,输出的时候跟不加是一样的效果

// 十进制可以加'
cout << 13'890'324 << endl; // 13890324
// 二进制前加0b
cout << 0b111 << endl; //7
// 八进制前加0
cout << 011 << endl; //9
// 十六进制前加0x
cout << 0xf1 << endl; //241(1*16^0 + f*16^1 = 241)

2、常量

  • 直接使用,如cout << 123 << endl;
  • const 类型 名字 {值}const 类型 名字 = 值
  • #define 名字 值 (没有分号)

3、变量定义赋值可以用{},(),=,但最好用大括号{},比较安全

// 如int赋值
int a = 7.5; // 编译自动变为7
int a { 7.5 }; // 编译不通过,不会降7.5自动变成7,安全
// 大括号内什么都不写则默认赋值为0

4、整型/浮点数的表达

二进制:0b11L
八进制:011L
十进制:121L
十六进制:0xf1L

后缀(推荐用大写)

  • L/l:long型
  • LL/ll:long long型
  • U/u:无符号型,可以与L或LL组合使用,如65535ULL
    在这里插入图片描述

float:F/f
如200.0F (不可以是200F)
不带后缀一律视为double,如200.0
后缀为L的浮点数视为long double,如200.0L

5、浮点数运算精确度要注意

float a{ 65923600.0 }, b{ 0.000001 }, c{ a + b };
cout << (a == c ? 1 : 0) << endl; // 1
cout << a << endl; // 6.59236e+07
cout << b << endl; // 1e-06
cout << c << endl; // 6.59236e+07

// 这里精度丢失了,a和c是相等的

6、类型转换

类型转换顺序:
在这里插入图片描述

有的编译器里int与long是平级关系

int a{ 500 };
unsigned b{ 1000 };
cout << a - b << endl; // 4294966796,这里int转换为了unsigned int
long long a{ 500 };
unsigned b{ 1000 };
cout << a - b << endl; // -500,这里unsigned int转换为了long long
int a{ 500 };
unsigned b{ 1000 };
a -= b;	//a-b为unsigned,但赋值给了a,转成了int,故结果为-500
cout << a << endl; // -500
int a{ 500 };
unsigned b{ 1000 };
// C中的强转
cout << (int)(a - b) << endl; // -500
// C++中的强转:static_cast<>()
cout << static_cast<int>(a - b) << endl;

7、字符

char charA{ 'A' };
cout << charA << endl;	//A

wchar_t wcharA{ L'a' };
cout << wcharA << endl;	// 97
wcout << wcharA << endl; // wchar_t要用wcout,输出a

// 没有支持char16_t和char32_t的输出,cout只能将其输出为数字
char16_t char16{ u'a' };
cout << char16 << endl;	// 97

char32_t char32{ U'a' };
cout << char32 << endl;	// 97

注意一下另外三个字符类型要用L,u,U激活

wchar_t要显示中文需要setlocale(LC_ALL, "chs");

8、推断类型

auto 变量名 {初始值}

查看一个变量的类型typeid(变量).name()

auto a{ 200 };
cout << a << endl; // 200
cout << typeid(a).name() << endl; // int

auto b{ 100LL };
cout << b << endl; //100
cout << typeid(b).name() << endl;; // __int64

auto c{ 100L };
cout << c << endl; //100
cout << typeid(c).name() << endl; // long

auto e{ L'A' };
cout << e << endl; //65
cout << typeid(e).name() << endl; // wchar_t

auto d{ U'A' };
cout << d << endl; //65
cout << typeid(d).name() << endl; // char32_t

9、格式化输出流及转义

格式化输出流操作
std::fixed以小数点模式输出浮点数,例如3.1415926
std::scientific以科学计数法输出浮点数,例如3E100
std::defaultfloat恢复默认的浮点数输出
std::setprecision(int)设置浮点数的精度,例如std::setprecision(2)后,输出 3.14
std::dec以后输出的数字采用十进制输出,例如999
std::hex以后输出的数字采用十六进制输出,例如FFF
std::oct以后输出的数字采用八进制输出,例如777
std::showbase十六进制和八进制输出前显示前缀,例如0xFFF
std::shownobase关闭十六进制和八进制显示前缀
std::setw(int)把输出内容设置宽度,例如std::setw(10)
std::setfill(char)当显示宽度超过字符宽度时,用指定字符串填充剩余内容,例如std::setfill('*')
std::left设置字符对齐模式为左对齐
std::right设置字符对齐模式为右对齐

红色部分需要使用相关头文件#include <iomanip>

10、运算符优先级

C++运算符优先级表,从上到下,从左到右,优先级依次减弱。

优先级运算符说明结合性
1::范围解析自左向右
2++ --后缀自增/后缀自减
()括号
[]数组下标
.成员选择(对象)
->成员选择(指针)
3++ --前缀自增/前缀自减自右向左
+ -加/减
! ~逻辑非/按位取反
(type)强制类型转换
*取指针指向的值
&取某某的地址
sizeof取某某的大小
new, new[]动态内存分配/动态数组内存分配
delete, delete[]动态内存释放/动态数组内存释放
4.* ->*成员对象选择/成员指针选择自左向右
5* / %乘法/除法/取余
6+ -加号/减号
7<< >>位左移/位右移
8< <=小于/小于等于
> >=大于/大于等于
9== !=等于/不等于
10&按位与
11^按位异或
12|按位或
13&&与运算
14||或运算
15?:三目运算符
16=赋值自右向左
+= -=相加后赋值/相减后赋值
*= /= %=相乘后赋值/相除后赋值/取余后赋值
<<= >>=位左移赋值/位右移赋值
&= ^= |=位与运算后赋值/位异或运算后赋值/位或运算后赋值
17throw抛出异常
18,逗号自左向右

11、枚举变量

  • 枚举类型可以提高代码的可读性和安全性
  • 枚举类型默认是int类型
  • 枚举类型成员只能是整数类型
  • 枚举类型和其他类型转换需要强制转换
  • 默认情况下,枚举类型的下一个项的初始值是上一个项的初始值+1
enum class EquipLevel :int
{
	normal = 10, armyA = normal,
	high, armyB = high,
	rare, armyC = rare,
	epic, armyD = epic,
	legend, armyE = legend,
	myth, armyF = myth
};

EquipLevel A{ EquipLevel::normal };
EquipLevel B{ EquipLevel::epic };

short diff = (int)B - (int)A;
cout << diff << endl;	//3

c++枚举详细介绍以及具体用法

12、自定义变量名称

  • #define A TypeName,如#define ZS1 int
  • typedef TypeName A ,如typedef int ZS2
  • using A = TypeName,如using ZS3 = int

13、位运算

指针和引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/658542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web前端复习二

第一章测试 选项中加粗的为答案 1.图片的边框可以通过( )设定宽度。 A.width B.height C.border D.align 2.关于超链接&#xff0c;( )属性用于规定在何处打开链接文档。 A.href . B.target C.title D.onclick 3.( )是在新窗口打开网页文档。 A _blank B_self C_…

TQSDRPI开发板教程:DDR检测

项目资源分享 链接&#xff1a;https://pan.baidu.com/s/1IIrUL7Zczb6DwCAkihylRA 提取码&#xff1a;0z0z 打开vivado2019.1创建工程 下一步 设置工程名称与地址。勾选reate…选项&#xff0c;会创建一个新的文件夹&#xff0c;项目保存在其中&#xff0c;文件夹名称与工程名…

算法学习笔记(7.1)-贪心算法(分数背包问题)

##问题描述 给定 &#x1d45b; 个物品&#xff0c;第 &#x1d456; 个物品的重量为 &#x1d464;&#x1d454;&#x1d461;[&#x1d456;−1]、价值为 &#x1d463;&#x1d44e;&#x1d459;[&#x1d456;−1] &#xff0c;和一个容量为 &#x1d450;&#x1d44e;&…

Midjourney保姆级教程(五):Midjourney图生图

Midjourney生成图片的方式除了使用文字描述生成图片外&#xff0c;还有“图生图”的方式&#xff0c;可以让生成的图片更接近参考的图片。 今天我们来聊聊“图生图”的方式。 一、模仿获取propmt 很多时候&#xff0c;我们不知道画什么内容的图片&#xff0c;大家可以关注内…

28-ESP32-S3 lwIP 轻量级 TCP/IP 协议栈

ESP32-S3 lwIP 介绍 ESP32-S3 是一款集成了Wi-Fi 和蓝牙功能的微控制器。它的设计初衷是为了方便嵌入式系统的开发。不过你可能会好奇&#xff0c;ESP32-S3 怎么实现与外部网络的通信呢&#xff1f;这里就要提到一个开源的 TCP/IP 协议栈&#xff0c;它叫做lwIP&#xff08;轻…

C# TcpClient

TcpClient 自己封装的话&#xff0c;还是比较麻烦的&#xff0c;可以基于线程&#xff0c;也可以基于异步写&#xff0c;最好的办法是网上找个插件&#xff0c;我发现一个插件还是非常好用的&#xff1a;STTech.BytesIO.Tcp 下面是这个插件作者的帖子&#xff0c;有兴趣的可以…

OpenHarmony Liteos_A内核之iperf3移植心得

一、iperf3工作原理 iperf3主要的功能是测试基于特定路径的带宽&#xff0c;在客户端和服务器端建立连接&#xff08;三次握手&#xff09;后&#xff0c;客户端发送一定大小的数据报并记下发送的时间&#xff0c;或者客户端在一定的时间内发送数据并记下发送的总数据。带宽的…

MySQL--二进制日志

目录 一、作用 二、binlog配置 1.查看当前配置 2.修改配置文件​ 3.binlog配置参数解释 三、binlog记录内容说明 1.记录内容 2.DDL、DCL记录格式 3.DML记录格式 4.记录内容查看 四、bin_log_format 记录模式 1.行模式 Row 2.语句模式 Statement 3.混合模式 五、…

使用Django实现WebSocket

文章目录 安装依赖编写Consumer配置路由在模板中使用WebSocket运行应用 WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;在Web开发中被广泛应用于实时通信和数据推送。本文将介绍如何在Django中使用WebSocket来实现实时通信功能。 安装依赖 首先&#xff0…

【Matlab函数分析】绘图函数:mesh网格曲面图

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

基于Spring Boot的高校图书馆管理系统

项目和论文都有企鹅号2583550535 基于Spring Boot的图书馆管理系统||图书管理系统_哔哩哔哩_bilibili 第1章 绪论... 1 1.1 研究背景和意义... 1 1.2 国内外研究现状... 1 第2章 相关技术概述... 2 2.1 后端开发技术... 2 2.1.1 SpringBoot 2 2.1.2 MySQL.. 2 2.1.3 My…

FTP协议——BFTPD基本操作(Ubuntu+Win)

1、描述 本机&#xff08;Win10&#xff09;与虚拟机&#xff08;Ubuntu22.04.4&#xff09;上的BFTPD服务器建立FTP连接&#xff0c;执行一些基本操作。BFTPD安装教程&#xff1a;FTP协议——BFTPD安装&#xff08;Linux&#xff09;-CSDN博客 2、 步骤 启动BFTPD。启动文件…

Spring MVC 工作流程源码分析

前言&#xff1a; 我们知道 Spring MVC 的核心是前端控制器 DispatcherServlet&#xff0c;客户端所有的请求都会交给 DispatcherServlet 来处理&#xff0c;本篇我我们来分析 Spring MVC 处理客户端请求的流程&#xff0c;也就是工作流程。 Sping MVC 只是储备传送门&#x…

Talken - 语音命令系统

Talken - 语音命令系统 通过集成最先进的语音命令系统 Talken,释放游戏的全部潜力。 借助 Talken,您可以让玩家通过语音命令控制动作,从而重新定义游戏体验。 观看角色移动并对语音指令做出实时反应,模糊游戏与现实之间的界限。 主要特征: 🗣️ 语音驱动的游戏玩法:…

浙江大学数据结构MOOC-课后习题-第九讲-排序2 Insert or Merge

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 刚开始我打算想推出一个规律&#xff0c;来判断是否是归并排序&#xff0c;但实在太过于复杂&#xff0c;我很难去想出这样的规律…因此&#xff0c;参考了其他博主的思路——每做一次排…

7 步解决Android Studio模拟器切换中文输入

详细步骤传送地址&#xff1a;Android Studio 模拟器切换中文输入 目录 01 问题概述 02 模拟器的调试 01 问题概述 大家在使用Android Studio 软件进行项目演示时总会遇到一些输入框需要输入中文汉字的情况&#xff0c;由于AS自带的模拟器基本都是英文&#xff0c;这时就有同…

服务器主机托管一站式托管服务有哪些?

服务器主机托管一站式托管服务&#xff0c;作为现代企业信息化建设的重要一环&#xff0c;为企业提供了一种高效、安全、可靠的服务器运行环境。下面&#xff0c;我们将从多个方面详细介绍这一服务的内容。 一、硬件与基础设施 服务器主机托管服务首先涵盖了服务器硬件和网络基…

Vulhub——CAS 4.1、AppWeb、apisix

文章目录 一、Apereo CAS 4.1&#xff08;反序列化命令执行漏洞&#xff09;二、CVE-2018-8715&#xff08;AppWeb认证绕过漏洞&#xff09;三、apisix3.1 CVE-2020-13945(默认密钥漏洞&#xff09;3.2 CVE-2021-45232&#xff08;Dashboard API权限绕过导致RCE&#xff09; 一…

vue3 手动简单 24h 甘特图封装

甘特图 手动封装简版甘特图&#xff0c;纯展示功能&#xff0c;无其他操作 文章目录 甘特图前言效果图组件使用总结 前言 开始的思路是使用echarts 瀑布图来体现&#xff0c;但是试验后发现&#xff0c;头部时间功能不满足&#xff0c;然未找到其他组件&#xff0c;于是手动封…

厨师服穿戴智能监测摄像机

随着科技的发展&#xff0c;智能监测摄像技术已经在各个领域得到了广泛应用。近年来&#xff0c;厨师服穿戴智能监测摄像机逐渐成为了厨房管理和食品安全监控的重要工具。这种设备能够为厨师提供实时监测和反馈&#xff0c;提高工作效率和食品安全&#xff0c;进一步提高整个餐…