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;	//Awchar_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;	// 97char32_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; // intauto b{ 100LL };
cout << b << endl; //100
cout << typeid(b).name() << endl;; // __int64auto c{ 100L };
cout << c << endl; //100
cout << typeid(c).name() << endl; // longauto e{ L'A' };
cout << e << endl; //65
cout << typeid(e).name() << endl; // wchar_tauto 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、位运算

指针和引用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis集群数据迁移

redis槽位 ​ redis集群搭建完后会自动在redis集群中内置16384个哈希槽(至于为啥是16384个,有兴趣的读者可进行深究)。当客户端向redis集群中插入数据时(key-value),redis会先对key使用crc16算法算出一个结果值,然后用此结果值对16384进行求余,此余数会对应到16384中的…

Java基础:桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09;主要用于将抽象部分与其实现部分分离&#xff0c;使它们可以独立变化。这种模式通过创建一个抽象类和实现了该抽象类的具体类之间的桥梁来实现这一目的&#xff0c;从而让抽象类和它的实现可以以组合的方式耦合&#xff0c;而不…

【webrtc】rtp扩展:绝对发送时间、绝对采集时间、时间戳插值

WebRTC RTP 标头扩展审查绝对发送时间和绝对采集时间,二者是不同的当没有打开绝对采集时间戳的扩展时,webrtc依旧会使用AbsoluteCaptureTimeInterpolator 在接收测估算 绝对采集时间戳。Absolute Send Time 带宽估计算法用 The Absolute Send Time extension is used to stam…

LeetCode/NowCoder-链表经典算法OJ练习4

人的才华就如海绵的水&#xff0c;没有外力的挤压&#xff0c;它是绝对流不出来的。流出来后&#xff0c;海绵才能吸收新的源泉。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;环形链表 题目二&#xff1a;环形链表 II 题目三&#xff1a;随机…

《Python编程从入门到实践》day34

# 昨日知识点回顾 json文件提取数据、绘制图表渐变色显示 # 今日知识点学习 第17章 17.1 使用Web API Web API作为网站的一部分&#xff0c;用于与使用具体URL请求特定信息的程序交互&#xff0c;这种请求称为API调用。 17.1.1 Git 和 GitHub Git&#xff1a;分布式版本控制系…

vue-封装上下(垂直方向)轮播

需求&#xff1a;没有找到特别好的上下轮播插件-所以自己写了一个简单的demo 一.上下平滑轮播-移入停止-移出继续轮播 <!--* 消息滚动 --> <template><div class"news"><div id"roll" class"InfoBox" mouseover"thi…

Media Encoder 2024 for Mac媒体编码器安装教程ME2024安装包下载

安装 步骤 1&#xff0c;双击打开下载好的安装包。 2&#xff0c;选择install ame_24...双击打开启动安装程序。 3&#xff0c;点击install。 4&#xff0c;输入电脑密码。 5&#xff0c;软件安装中... 6&#xff0c;安装结束点击好。 7&#xff0c;返回打开的镜像 选择激活补…

零基础,想做一名网络安全工程师,该怎么学习?

​ 相比IT类的其它岗位&#xff0c;网络工程师的学习方向是比较明亮的。想要成为网络工程师&#xff0c;华为认证就是最好的学习方法。而网络工程师的从零开始学习就是从华为认证的初级开始学起&#xff0c;也就是HCIA&#xff0c;也就是从最基本的什么是IP地址、什么是交换机这…

响应式流和reactor框架进阶

响应式流和reactor框架进阶 响应式流创建、转换、处理 本文档主要介绍在响应式编程中如何从流中获取数据并处理。 前提条件 假设您已经能掌握Java基础、Maven使用、Lamda表达式、响应式编程等基础。 如何获取流中数据 &#x1f30f; 说明 1、不要试图从流中获取数据出来&a…

第⼀次页⾯加载会触发哪⼏个钩⼦?DOM 渲染在哪个周期中就已经完成?

在Vue中&#xff0c;第一次页面加载会触发以下钩子函数&#xff1a; beforeCreate&#xff1a;在实例初始化之后&#xff0c;数据观测(data observer) 和 event/watcher 事件配置之前被调用。 created&#xff1a;在实例创建完成后被立即调用。在这一步&#xff0c;实例已完成…

Angular(1):使用Angular CLI创建空项目

要创建一个空的 Angular 项目&#xff0c;可以使用 Angular CLI&#xff08;命令行界面&#xff09;。以下是使用 Angular CLI 创建一个新项目的步骤&#xff1a; 1、安装 Angular CLI&#xff1a; 打开你的命令行界面&#xff08;在 Windows 上是 CMD、PowerShell 或 Git Bas…

使用python绘制一个五颜六色的爱心

使用python绘制一个五颜六色的爱心 介绍效果代码 介绍 使用numpy与matplotlib绘制一个七彩爱心&#xff01; 效果 代码 import numpy as np import matplotlib.pyplot as plt# Heart shape function def heart_shape(t):x 16 * np.sin(t)**3y 13 * np.cos(t) - 5 * np.cos…

【Python设计模式07】工厂方法模式

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。通过使用工厂方法模式&#xff0c;可以将对象的创建过程与使用…

微软:最新ChatGPT-4o模型,可在 Azure OpenAI上使用

北京时间5月14日凌晨&#xff0c;OpenAI 一场不到 30 分钟的发布会&#xff0c;正式发布了 GPT-4o&#xff0c;视频语音交互丝滑到吓人&#xff0c;还即将免费可用&#xff01; GPT-4o&#xff0c;其中的「o」代表「omni」&#xff08;即全面、全能的意思&#xff09;&#xff…

如何通过locust进行全链路压测

通过Locust进行全链路压测的具体步骤 Locust是一个开源的性能测试工具&#xff0c;支持分布式压测和高并发测试。它基于Python编写&#xff0c;使用方便且功能强大。本文将详细介绍如何使用Locust进行全链路压测&#xff0c;包括准备工作、测试脚本编写、压测执行和结果分析等…

BIO从提交到执行完毕过程分析

1.上层调用submit_bio()向块设备层提交IO请求,q->make_request_fn()=>__make_request()被调用,将BIO合并到已有的request或为BIO新分配一个request. 2.调用elv_merge(),首先尝试是否可以和上一次合并的request进行合并,如果不能合并,调用IO调度器提供的合并函数,尝试与I…

AIGC行业:巨头引领的创新浪潮与市场前景

AIGC&#xff08;AI Generated Content&#xff09;技术&#xff0c;作为新兴的技术力量&#xff0c;正逐渐改变内容创作的生态。在这一变革中&#xff0c;国内科技巨头如百度、阿里巴巴、腾讯等的积极参与&#xff0c;不仅为行业带来资本和技术支持&#xff0c;更预示着AIGC技…

react 下拉框内容回显

需要实现效果如下 目前效果如下 思路 : 将下拉框选项的value和label一起存储到state中 , 初始化表单数据时 , 将faqType对应的label查找出来并设置到Form.Item中 , 最后修改useEffect 旧代码 //可以拿到faqType为0 但是却没有回显出下拉框的内容 我需要faqType为0 回显出下拉…

Shell脚本基本命令

文件名后缀.sh 编写shell脚本一定要说明一下在#&#xff01;/bin/bash在进行编写。命令选项空格隔开。Shell脚本是解释的语言&#xff0c;bash 文件名即可打印出编写的脚本。chmod给权限命令。如 chmod 0777 文件名意思是给最高权限。 注意:count赋值不能加空格。取消变量可在变…

如何提升网络性能监控和流量回溯分析的效率?

目录 什么是网络性能监控&#xff1f; 网络性能监控的关键指标 什么是流量回溯分析&#xff1f; 流量回溯分析的应用场景 网络性能监控与流量回溯分析的结合 实例应用&#xff1a;AnaTraf网络流量分析仪 如何选择适合的网络性能监控和流量回溯分析工具&#xff1f; 结论…