那个学C++不没有点大病?一点点癫狂的语法混乱版note和有一点点长的无语的标题,让人怀疑精神状态尼奥

news2024/12/29 8:46:36

类型转换

切勿混用无符号类型和有符号类型
表达式中两者都有时,有符号类型会转化为无符号类型,当该值为负时会出现非预期结果;

unsigned a = 1; int b = -1; cout<<a*b;//输出 4294967295
//详解: b的源码:100...1 负数转补码按位取反加1后为:1111...0  无符号类型把该值读出为4294967295 (结果视所在机器位数而定)

无符号类型用于循环时注意其永远不会小于0的特性

转义序列和指定类型

在这里插入图片描述
在这里插入图片描述
注意:“\1234” 前3个构成转义序列八进制对应的asill值

在这里插入图片描述
注:表示长整型时用L而不是小写 l 它和 1 容易弄混;

后缀的存在是为了明确指示字面值的数据类型,从而避免编译器的隐式类型转换或产生二义性。然而,并非所有数据类型都需要后缀,因为它们的类型可以根据字面值的形式自动推断出来。此外,使用错误的后缀可能导致编译错误或运行时错误,因此需要小心使用。C++弄啥呢?这玩意儿真的是服了,哎

在这里插入图片描述

(a) 字符  宽字符型字符(wchar_t类型)  字符串  宽字符型字符串
(b) 整数  无符号数  长整数  无符号长整数  八进制数  十六进制数
(c) 浮点型   单精度浮点型   long double类型的扩展精度浮点型 
(d) 整数  无符号整数 浮点数  科学计数法表示的浮点数

变量初始化 不等于 赋值 (初始化是创建变量并赋予一个初始值,赋值是擦除当前值用新值代替)
变量声明 规定了变量类型和名字,定义 除此之外还申请了存储空间,可能还会赋初始值。(建议初始化每一个内置类型的变量)

extern int i; //声明 i 
int j;//声明并定义 j
extern int k = 3; //赋初始值抵消了extern的作用变成了定义,且如果是在函数内部初始化extern标记的变量会报错

变量必须且只能在一个文件中定义一次,其他文件中使用到该变量的必须进行声明,却绝对不能重复定义!(变量能且只能被定义一次,但是可以被多次声明)

标识符的命名规范
由字母、数字、下划线组成,且必须以字母或下划线开头。
不能作标识符规范

  • 一些作为C++语言的使用的关键字,如if、int、false等
  • 一些作为C++标准库的保留字,不能连续两个下画线,不能下画线连大写字母开头,
  • 定义在函数体外的标识符不能以下划线开头

推荐的标识符规范

  • 见名知义,能体现实际含义好懂
  • 变量名小写字母,如 index
  • 类名大写字母开头,如Index
  • 标识符多字母组成采用下划线分割或大写字母开头分割,如student_loan_up或studentLoanUp

作用域
全局作用域和块作用域
作用域嵌套,外层作用域声明某名字,其嵌套的作用域也就是内作用域都能访问该名字,同时允许内层作用域重新定义外层作用域已有的名字。

引用和指针的主要区别

  1. 引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
  2. 不能有 NULL 引用,引用必须与合法的存储单元关联(指针则可以是 NULL)。
  3. 一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

https://www.runoob.com/w3cnote/cpp-difference-between-pointers-and-references.html

使用未经初始化的指针容易引发错误,因此不知道指向具体对象时初始化为nullptr ,如:int *p = nullptr;
因此要判断一个指针是否指向合法地址,判断是不是nullptr即可,或者如果没有初始化指针的话可以try…catch是否出错。

void* 是一种特殊的指针类型,可以存放任意对象的地址。

int* p和 int *p的问题,其实基本类型是int的p是指向int的指针;所以建议采用第二种写法,int *p1, *p2;

指向指针的指针,为了访问原始对象,需要解引用两次;
指向指针的引用,引用本身不是对象因此不能定义指向引用的指针,但是指针是对象,所以存在对指针的引用;

int i = 33;
int *p;//int 类型的指针p
int *&r = p;//从右往左看,r 是 对指针p的引用
r = &i;//r是指向p的引用,给r赋值&i 就是让p指向i
*r = 0;//解引用 r 得到 i,也就是p指向的对象,改i的值为0

面对复杂的指针或引用声明语句时,从右向左阅读有助于弄清真实含义;

定义一个const变量在多个文件中声明并使用它的方法是,不管是定义还是声明都加extern关键字;

extern const int bufsize = fcn();//1.cc定义并初始化一个常量,并让该常量能被其他文件访问

** 底层const和顶层const? **

常量表达式:值不会改变并且编译过程就能得到计算结果的表达式
比如 const staff_size = get_size(); 就是不是,因为其到运行时才能获取到,const int limit = 20;才是常量表达式

C++11 :如果你认定变量是一个常量表达式,那就把它声明成 constexpr 类型;

auto类型推导
1、使用引用作初始值时,以引用对象的类型作为auto的类型;
int i = 0, &r = i;
auto a = r; //a 类型为 int
2、auto会忽略顶层const、保留底层const;
auto &h = 42; //非常量引用需要绑定一个可修改的对象;
const auto &j = 42;

基于C++14/17的Http应用框架Drogon: https://github.com/drogonframework/drogon/blob/master/README.zh-CN.md(《权力的游戏》中的一条龙的名字(汉译作卓耿))
grpc翻译的中文文档:https://doc.oschina.net/grpc?t=58008 (跨平台 的RPC框架),解释:https://juejin.cn/post/7047885453336248327
腾讯开源的rpc框架phxrpc:https://gitee.com/mirrors/PhxRPC#https://gitee.com/link?target=https%3A%2F%2Fgithub.com%2FTencent%2Fphxrpc%2Fwiki
https://github.com/Tencent/phxrpc

(*it).empty(); 简化后it->empty();

凡是使用了迭代器的循环体,都不要向迭代器所属容器添加元素;
比如push_back可能导致vector对象的迭代器失效;
比如范围for循环向vector添加元素

空指针是指向null的指针用于内存初始化指针变量,内存编号0~255是系统占用内存不可访问;
野指针是指向非法的内存空间的指针,两者访问应该都会报错,但是在Dev下运行如下代码:编译无误还能运行,只不过会无输出,运行一段时间后窗口自动关闭,这是为什么?

#include <bits/stdc++.h>

using namespace std;

int main(){
	int a = 10;
	int *p = NULL;
	cout << *p <<endl;
	
	int *q = (int *)0x1110;
	cout << *q <<endl;
	return 0;
}

虽然语法无误可以通过编译器,但是由于解引用空指针和野指针导致的内存访问违例,操作系统为了保护系统终止了该程序的执行。

在这里插入图片描述
机器真正的存法:正数直接存,负数保留符号位按位取反+1;
大端序是网络中普遍用的符合人类阅读习惯,小端序大多数个人PC用的,符合机器;

在这里插入图片描述

在这里插入图片描述
这个非常重要一定要注意!!!
在这里插入图片描述
Redis中设计的sdshdr结构体有个len变量存字符串长度,不用遍历去算;有个free管理剩余容量,如果容量不够会自动扩容并修改len大小;

指针和引用

在这里插入图片描述

指针的数组(array of pointers),这个数组里一个个的都是指针 。 T *t[ ]
数组的指针(a pointer to an array),这一个指针指向一个数组。T (*t) [ ]

在这里插入图片描述
第三个例子先看第一个const修饰的左边char表示指针的值不可改,再看第二个const修饰的*,表示指针的指向不能改;

const修饰指针有三种情况

  1. const修饰指针 — 常量指针(指针指向可改,指向的值不可改)
  2. const修饰常量 — 指针常量(指针指向不可改,指针的值可以改)
  3. const即修饰指针,又修饰常量(都不能改)

看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量

const常用来防止误操作

RALL

智能指针

内存模型

内存泄漏

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

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

相关文章

PL端DDR4读写测试实验(未完成)

文章目录 DDR4介绍实验过程编写XDC使用IP核上板验证TODO 参考 DDR4介绍 开发板PL有一颗16bit的DDR4。 先说明硬件信号&#xff08;按该芯片&#xff09;&#xff1a; 信号名说明DQData input/output&#xff0c;双向数据线&#xff08;这个芯片是x16的&#xff0c;使用DQ[15…

SpringBoot初级开发--多环境配置的集成(9)

在Springboot的开发中&#xff0c;我们经常要切换各种各样的环境配置&#xff0c;比如现在是开发环境&#xff0c;然后又切换到生产环境&#xff0c;这个时候用多环境配置就是一个明智的选择。接下来我们沿用上一章的工程来配置多环境配置工程。 1.准备多环境配置文件 这里我…

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比

时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比 目录 时序预测 | MATLAB实现基于PSO-GRU、GRU时间序列预测对比效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现基于PSO-GRU、GRU时间序列预测对比。 1.MATLAB实现基于PSO-GRU、GRU时间序列预测对比&…

批量剪辑工具:轻松垂直翻转倒立视频画面

你是否曾经遇到这样的情况&#xff1a;拍摄的视频画面是倒立的&#xff0c;但你需要在正立的情况下观看。这时候&#xff0c;你需要一款视频批量剪辑工具来帮助你垂直翻转倒立的视频画面。 首先第一步&#xff0c;我们要打开【视频剪辑高手】&#xff0c;登录账号。 第二步&…

偏置曲柄滑块机构连杆上的双尖点轨迹

偏置曲柄滑块机构是一种常见的机械传动机构&#xff0c;由曲柄、偏置滑块和连杆组成。其中&#xff0c;偏置滑块具有急回特性&#xff0c;可以使机构在运动过程中产生快速的反向运动。 偏置曲柄滑块机构中&#xff0c;连杆上的双尖点轨迹指的是连杆在偏置曲柄滑块机构的运动过…

MOS的减速加速电路设计

引言&#xff1a;在开始讲解MOS的减速加速电路之前&#xff0c;我们还是先来回顾MOS开启与关闭的根本机制。以NMOS为例&#xff0c;开启NMOS本质是对G极进行充电&#xff0c;至Cgs电荷充满&#xff0c;G极才会达到控制端电平值或者开启阈值&#xff0c;关断NMOS时&#xff0c;G…

嵌入式开发之syslog和rsyslog构建日志记录

1.syslogd作客户端 BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.Usage: syslogd [OPTIONS]System logging utility-n Run in foreground-O FILE Log to FILE (default:/var/log/messages)-l N Log only messages more urge…

QT DAY 2

window.cpp #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//this->resize(430,330);this->resize(QSize(800,600));// this…

音视频入门基础理论知识

文章目录 前言一、视频1、视频的概念2、常见的视频格式3、视频帧4、帧率5、色彩空间6、采用 YUV 的优势7、RGB 和 YUV 的换算 二、音频1、音频的概念2、采样率和采样位数①、采样率②、采样位数 3、音频编码4、声道数5、码率6、音频格式 三、编码1、为什么要编码2、视频编码①、…

无涯教程-Android - CheckBox函数

CheckBox是可以由用户切换的on/off开关。为用户提供一组互不排斥的可选选项时,应使用复选框。 CheckBox 复选框属性 以下是与CheckBox控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。 继承自 android.widget.T…

探索IPv6:未来互联的新时代

文章目录 一、IPv4的问题二、IPv6的优势三、地址格式与地址书写压缩四、网段划分五、地址分类六、IPv6邻居发现协议七、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、IPv4的问题 地址资源枯竭&#xff1a; 由于IPv4地址长度有限&#xff0c;可用…

导致事物失效的场景有哪些 ?

目录 1. 导致事物失效的场景有哪些 &#xff1f; 1.1 为什么 Transaction 修饰非 public 方法会导致事物失效 &#xff1f; 1.2 代码中使用 try/catch 处理了异常为什么会导致事物失效 &#xff1f; 1.3 为什么在类内部调用 Transaction 修饰的方法会导致事务失效 ? 1.4 …

一图胜千言!数据可视化多维讲解(Python)

数据聚合、汇总和可视化是支撑数据分析领域的三大支柱。长久以来&#xff0c;数据可视化都是一个强有力的工具&#xff0c;被业界广泛使用&#xff0c;却受限于 2 维。在本文中&#xff0c;作者将探索一些有效的多维数据可视化策略&#xff08;范围从 1 维到 6 维&#xff09;。…

批处理启动程序

&#x1f495;批处理启动程序 新建一个txt&#xff0c;把后缀改成bat&#xff0c;编辑脚本&#xff1a;start exe路径即可&#xff1a;

$nextTick使用

在Vue中&#xff0c;$nextTick是一个实例方法&#xff0c;用于在DOM更新之后执行回调函数。它可以用于在更新视图后执行一些操作&#xff0c;例如访问更新后的DOM元素或执行其他异步任务。 以下是$nextTick的使用方法&#xff1a; this.$nextTick(() > {// 在DOM更新后执行…

【若依框架RuoYi-Vue-Plus 图片回显不显示问题,OSS文件上传或者本地上传】

一、问题 1.设计表 product&#xff08;商品表&#xff09; 有 id &#xff08;id&#xff09; name&#xff08;商品名&#xff09;icon&#xff08;图标&#xff09; 2.使用若依代码生成功能&#xff0c;导入product表&#xff0c;代码生成。 3.将生成的代码导入到项目中得到…

Vue-Router 一篇搞定 Vue3

前言 在 Web 前端开发中&#xff0c;路由是非常重要的一环&#xff0c;但是路由到底是什么呢&#xff1f; 从路由的用途上讲 路由是指随着浏览器地址栏的变化&#xff0c;展示给用户不同的页面。 从路由的实现原理上讲 路由是URL到函数的映射。它将 URL 和应用程序的不同部分…

PXE 装机(五十)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、PXE是什么 二、PXE的组件 三、配置vsftpd 四、配置tftp 五、准备pxelinx.0文件、引导文件、内核文件 ​六、配置dhcp 七、创建default文件 八、配置pxe无人值守…

C语言圣经KR笔记 1.10外部变量和作用域

1.10外部变量和作用域 上一节main中的变量&#xff0c;如line、longest等等&#xff0c;对main来说是私有的或者说是局部的。因为它们是在main中定义的&#xff0c;其他函数不能直接访问它们。其他函数中的变量也是如此&#xff0c;例如&#xff0c;getline中的变量 i 与copy中…

C语言:static关键字的使用

1.static修饰局部变量 这是static关键字使用最多的情况。我们知道局部变量是在程序运行阶段在栈上创建的&#xff0c;但是static修饰的局部变量是在程序编译阶段在代码段&#xff08;静态区&#xff09;创建的。所以在static修饰的变量所在函数执行结束后该变量依然存在。 //…