C++学习笔记 第三章 对象与基本类型

行为树基本概念与BehaviorTree.CPP库在C++的代码实现 文章介绍了行为树的基本概念以及介绍了MIT开源的行为树实现库——BehaviorTree.CPP的使用,包含部分C++的代码实现 阅读详情

1 从初始化和赋值类型谈起

初始化/赋值语句:将某个值与一个对象关联起来

- 值:字面值、对象所表示的值

- 标识符:变量、常量、引用

- 初始化基本操作:在内存中开辟空间,保存相应的数值。在编译器中构造符号表,将标识符与相关空间关联起来

- 值与对象都有类型

- 初始化/赋值可能涉及类型转换

2 类型详述

类型描述了

- 存储所需要的尺寸 int 4个字节 char 1个字节 但是并没有严格限制

- 取值空间 超过范围可能产生溢出 上溢出变最小值,下溢出变最大值

- 对齐信息:char是1,int是4

- 操作

基本类型

数值类型:字符类型(char,wchar_t,char16_t,char32_t)、整数类型(带符号,shot,int,long,long long。无符号:unsigned+带符号整数类型)、浮点类型(float,double,long double)、void

复杂类型

由基本类型组合、变种所产生的类型,可能是标准库引入或自定义类型

与类型相关的标准未定义部分

- char是否有符号

- 整数中内存中保存的方法:大端 小端

- 每种类型的大小(间接影响取值范围 )

字面值及其类型

- 整数字面值: 20,024,0x14。十进制,八进制,十六进制

- 浮点数:1.3,1e8 - double型

- 字符字面值: 'c','/n','/x4d' - char型

- 字符串字面值: "Hello" - char[6] 型

- 布尔字面值: true,false - bool 型

- 指针字面值:nullptr - nullptr_t 型 

变量及其类型

变量:对应了一段存储空间,可以改变其中内容

变量的类型在其首次申明(定义)时指定:

- int x:定义一个变量x,其类型为int

- 变量申明与定义的区别:extern 前缀

变量的初始化与赋值

- 初始化:在构造变量之初为其赋予的初始值 缺省初始化(int x,在函数中是任意值,全局变量赋予0)、直接/拷贝初始化、其他初始化

- 赋值:修改变量所保存的数值

3 复合类型:从指针到引用

指针:一种间接类型

指针同样是开辟一段空间,保存对象对应内存的首地址。指针的空间本身也有编号。

特点

- 可以指向不同的对象

int main()
{
    int x = 42;
    int y = 56;
    int* p = &x;
    
    p = &y;
}

- 具有相同的尺寸

相关操作

- &-取地址操作符

- *-解引用操作符

int main()
{
    int x = 42;
    int* p = &x;
    cout<< *p <<endl;
}

尽管指针具有相同的尺寸,但是解引用操作符时候会根据指针的类型去解引用

缺省初始化指针时一般不解引用,因此一般需要在初始化时赋值 

指针的定义:nullptr,表示空指针,因此初始化时可以写int* = nullptr;

指针与bool的隐式转换:非空为true,空为false 

指针加1、指针减1:按照指针类型往后或者往前类型大小的字节

比较大小:一般在数组内部比较

void* 指针

- 没有记录对象的尺寸信息,可以保存任意地址。可以跟任何指针做转换

- 支持判等操作

指针的指针: int** pp = &p

指针vs对象:指针复制成本低,读写成本高 

引用:

int main()
{
    int x = 3;
    int& ref = x;//申明类型:引用。相当于给x加了个别名
}

在构造的时候绑定对象,在生命周期不能改变。 

指针也是对象,因此可以定义引用。

int main()
{
    int x = 3;
    int* ptr = &x;
    
    int*& ref = ptr;
}

从右到左来看是指针还是引用,最近的是什么就是什么。

不能构造引用的引用。引用不是一个对象

4 常量类型和常量表达式

常量与变量相对,表示不可修改的对象

- 使用const申明常量对象

- 是编译期概念,编译器利用其防止非法操作、优化程序逻辑

常量指针与顶层常量

- const int* p;不能使用p改变指针的值

- int* const p;指的是指针不能修改

区别在于const和*的相对位置

- const int* const p;

- 常量指针可以指向变量 

常量引用(也可绑定变量)

- const int&

- 可读但不可写

- 主要用于函数形参

- 可以绑定字面值

常量表达式

- 使用constexpr声明 

- 申明的是编译器常量

- 编译器可以利用其进行优化

- 常量表达式指针: constexpr 位于 *左侧,但表示指针是常量表达式

5 类型别名与类型的自动推导

类型别名

可以为类型引入别名,从而引入特殊的含义或便于使用 typedef int MyInt 或者 using MyInt = int

使用using引入类型别名更好

typedef char MyCharArr[4]

using MyCharArr = char[4]

类型的自动推导

 auto 编译器自动推导,会产生类型退化(定义的变量放在后边作为右值的时候会产生类型退化

const auto/constexpr auto:推导出的是常量/常量表达式

auto&: 推导出引用类型,防止类型退化

6 域与对象的生命周期

域(scope)表示了程序中的一部分,其中的名称有唯一的含义

全局域:程序最外围的域。对象的生命周期是整个程序的运行区间

块域:用大括号限定的域。


【C++】使用 yaml-cpp 库操作 YAML 配置文件有利于我们灵活配置工程,解决大量重复劳动,也方便调试。YAML 是一种人类可读的数据序列化格式,它使用缩进和特定的符号来表示数据结构。在本文中,我们将详细介绍如何在 C++ 中使用yaml-cpp库来解析和生成 YAML 格式的数据。 阅读详情

相关推荐

模板与泛型编程之退化技术

模板与泛型编程之退化技术

FairLikeSnow的博客 267

C++中字面值常量和字面值类型

一个形如42的值被称为字面值常量。字面值常量的形式和值决定了常量的类型。例如0x42是16进制表示的整型常量。‘a'是char型字面值。字面值常量顾名思义由字面意思表示,是常量。字面值常量在程序中是直接表示的,整型直接写出大小,字符直接写出字符。一个字面值常量在编译时被直接解析为立即数,编译器内部维护字面值常量的类型。        常量表达式是指在编译和执行过程中,该表达式的值不会改变,且

zoukangdlut的博客 1850

第三章 C++之面向对象

C++基础进阶系列文章 目录 第一章 C++之函数 第二章 C++之引用实现游戏对话框显示 第三章 C++之面向对象 第二章 C++之面向对象C++基础进阶系列文章前言一、什么是面向对象二、抽象与类1、C++中的类:2、类的声明3、创建一个类(vs2013)1、LandOwnerV1.h2、LandOwnerV1.cpp3、class-test.cpp4、结果显示三、修饰符四、函数构造五、带参构造六、堆与栈七、this指针总结 前言 面向对象、类和抽象、修饰符、函数构造、带参构造、堆与栈、thi

yechen1的博客 2565

《C++ Primer》学习笔记(二):变量和基本类型

专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.youkuaiyun.com/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 文章目录专栏C++学习笔记变量和基本类型1、基本内置类型1)算数类型2)类型转换3)字面值常量...

种树最好的时间是10年前,其次是现在!!! 6775

让C++处理JSON类型配置文件更轻松-Hjson-cpp详解

Hjson-Cpp是一个C++实现的Hjson解析库,支持JSON扩展格式,适用于配置文件场景。主要特性包括:支持注释、多行字符串和无引号键名等友好语法;提供与JSON互转能力;轻量级实现仅依赖C++11标准库。文章详细介绍了安装方法、基本用法(解析字符串/文件、数据访问)、常用API、错误处理及性能优化建议,并包含高级特性如类型安全访问、文件操作和自定义解析规则。通过实际代码示例展示了如何集成使用该库,包括从GitHub获取源码、创建测试工程和解析配置文件的具体操作步骤。该库简化了C++项目中处理Hjso

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 1300

Hi3516CV610开发板ISP调优实战——从在线调试到参数固化部署全流程

本文详细介绍了Hi3516CV610开发板ISP参数从在线调试到固化部署的全流程。针对调试参数重启丢失的痛点,重点解析了如何从PQTools安全导出参数、进行格式转换与适配,并通过烧录工具或系统更新两种路径将参数永久固化至Flash。最后提供了双重验证与常见问题排查方法,确保调优效果在产品中稳定生效。

weixin_29169505的博客 425

C++基础:第三章 对象与基本类型

第3章 对象与基本类型 第1节 初始化/赋值语句 初始化的基本操作: 在内存中开辟空间(堆或栈),保存相应的数值 在编译器中构造符号表,将标识符与相关内存空间关联 值与对象都有类型 第2节 类型详述 类型是编译期概念,可执行文件中没有数据类型的概念 C++是强类型语言 引入类型是为了更好的描述程序,防止误用 类型描述 存储需要的尺寸(sizeof ,标准并没有严格限制)(一种类型对应的是汇编语言中一条简单的易处理的语句,汇编语句与程序的硬件相关) 取值空间(std::numeric_limits ,超

qq_42680785的博客 1738

C++常见面试题总结

C++常见面试题总结

xu_fu_yong的专栏 8万+

【C++入门】变量和基本类型

在C++编程中,变量和基本类型是编程的基础。了解如何声明和使用变量,以及掌握C++中的基本数据类型,是编写有效C++程序的第一步。

byte轻骑兵的技术小窝 1万+

嵌入式电机控制实战:手把手教你实现I/F强拖启动(附仿真代码)

本文详细介绍了嵌入式电机控制中的I/F强拖启动技术,通过参数配置、代码实现和仿真验证的完整流程,帮助开发者掌握永磁同步电机(PMSM)的高效启动方法。文章包含硬件平台搭建、参数整定黄金法则及MATLAB/Simulink仿真验证,适合工业自动化和智能设备领域的工程师参考。

rust6ferris的博客 911

H3C VRF实验

POP-vpn-instance-RT1]route-distinguisher 11:11 # VPN实例-RT1的路由区分器值11:11。配置路由泄露,其实就是在一个VPN示例中添加另一个VPN实例的下一跳,比如在VPN实例RT1中添加去往SRV的默认路由。但是也有了一个新的问题,那就是RT1、RT2和RT3也能互访了,这让VPN实例变得没有意义了。[POP]ip vpn-instance RT1 #配置vpn实例-RT1。绑定了VPN实例,所以要把路由添加到VPN实例POP中。

m0_68698993的博客 4024

重新理解cpp > 2变量和基本类型

对象 : 能储存数据 有某种类型的 内存空间类型说明符 变量名列表(,隔开)变量初始化 与 赋值不一样变量初始化: 创建变量同时赋予初始值赋值:当前值擦除,用新值代替分离式编译 : 程序分成多个文件,独立编译例如在main.cpp中使用std标准库里面的cout声明 : 让程序知道有这个名字定义 : 创建与名字关联的实体// 声明i但是没有定义int i // 声明并且定义了i// 定义变量仅仅可以被定义一次,但是可以被多次声明//i与i2都是int。

hdmkingdom的博客 1763

POWER SI仿真流程

一、打开软件Power SI二、加载PCB,可以直接使用brd文件,不用再进行格式转换三、check Stackup,与原来的PCB叠层对照一遍,检查数据加载后有没有出错。四、select Nets,加载brd文件后,可能所有的网络都处于使用状态,先在右侧net manager下面右键disable all nets,再使能需要仿真的电源网络(如果要仿真的网络没有归属到电源网络,在其上右键,选classfy as power \ground nets)

lx5213的博客 1318

深蓝学院C++笔记——第三章对象与基本类型之类型别名与类型的自动推导

深蓝学院C++笔记——第三章对象与基本类型之类型别名与类型的自动推导

qq_40247550的博客 213

【Qt笔记】1.VSCode搭建Qt运行环境

Qt6之后已经抛弃qmake,使用cmake。cmake相对qmake来说只有优点没有缺点。使用VSCode搭建完Qt的运行环境就能开开心心debug了.vscode需要使用的插件:2.Qt tools3.CMakec++插件可以不关注,缺啥都会提醒你.正常安装即可。

没有手牌的博客 2万+

图像处理基础 || (一) python 读取图像的常用方式

图像的读取与保存是图像处理或计算机视觉领域中最基本的操作,python中有众多的库支持图像的读取、显示与存储,常用的库包括 matplotlib、skimage 和 Pillow 库。

weixin_40234309的博客 5689

C++学习笔记4 基本数据类型

short s;int i;long l;虽然short intlong int或都可以使用,但我们更倾向于使用这些类型的短名称(不使用int后缀)。添加int后缀不仅会增加输入量,还会使该类型更难与int类型的变量区分开来。如果不小心漏掉了short或long修饰符,可能会导致错误。整数类型还可以采用可选的signed但是一般不使用此关键字,因为整数默认是有符号的。一般我们优先使用没有int后缀或signed前缀的简写类型。要定义无符号整数,我们要在类型之前使用。

Disthinker的博客 819

C# 上位机 YOLO 实战:从数据采集到目标识别的全流程拆解

本文以工业螺栓缺陷检测为例,完整拆解了C#上位机+YOLO从数据采集到目标识别的全流程。数据采集:保证图像质量,线程安全采集,必要时归档数据;预处理:适配YOLO模型输入格式,复用对象减少内存开销;推理解析:正确解析张量结果,过滤低置信度目标;落地环节:可视化展示结果,实现工业交互和日志记录。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1453

深蓝C++学习 第三章 对象与基本类型

类型,变量

qq_50615776的博客 423

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++学习笔记(十:类与对象基础)

本文是一系列C++学习笔记的摘要,主要内容包括:基础语法(编译阶段、程序结构、数据类型、运算符等);核心概念(函数、指针、内存管理、const关键字等);面向对象编程(类与对象、封装、继承、多态等特性);以及进阶内容(类型转换、typedef、运算符重载等)。笔记通过代码示例详细讲解了面向过程与面向对象的区别,类的定义与使用,成员函数与this指针的运作机制,以及封装特性的实现方式。特别强调了C++中类与结构体的区别,对象内存分配原理,以及如何通过访问控制实现信息隐藏。适合C++初学者系统学习核心语法和面向

ShangguanLuli的博客 1599

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深蓝学院C++笔记——第三章对象与基本类型之域与对象的生命周期

深蓝学院C++笔记——第三章对象与基本类型之域与对象的生命周期

qq_40247550的博客 203

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【C++基础】第2章:对象与基本类型

1. 从初始化/赋值语句谈起 初始化/赋值语句是程序中最基本的操作。 从初始化和赋值语句开始,就要设置类型了。其功能是将某个值与一个对象关联起来。 初始化语句:声明一个新的变量,并为新变量赋予初始值。如:int x = 10; 赋值语句是改变x的值,为x赋予一个新的值。 #include <iostream> int main() { int x = 10;//初始化 int y = 20; x = y;//赋值 } 值:字面值、对象(变量或常量)所表示的值(x=y,其中y不是字面值,而

qq_60225495的博客 333

C++变量与基本类型详解

本文深入探讨 C++ 中的变量与基本类型系统,涵盖类型分类、内存模型、初始化机制、作用域规则、类型转换及现代 C++ 特性。通过理论分析与代码示例结合,揭示 C++ 类型系统的设计哲学和底层实现机制。[存储说明符] [类型限定符] 类型说明符 [初始化器];存储说明符autoregisterstaticextern类型限定符constvolatilemutable。

分享unity,c#,c++相关内容 1169

C++变量与基本类型

C++中也包含了很多种类型,比如char,int,bool,float,double等,使用不用的类型进行变量的定义解决不同场景的问题。

程序员吗? 1060

C++学习笔记(类与对象part1)

本文摘要: C++面向对象编程核心概念解析:类与对象、指针、内存管理及保护机制 类与对象基础 类是抽象蓝图,对象是具体实例 包含封装、继承、多态三大特性 成员变量存储独立,成员函数共享 对象指针与this指针 对象指针访问成员:ptr->member或(*ptr).member this指针隐含于成员函数,指向当前对象 用于区分同名变量、实现链式调用等场景 数据保护机制 const常对象、常成员函数、常数据成员 指向对象的常指针与指向常对象的指针 常引用作为安全高效的对象传递方式 动态内存管理 new

ShangguanLuli的博客 1228
上一篇: CSAPP读书笔记 第一章 计算机系统漫游
下一篇: C++基础 第三章 数组、vector与字符串
PC2721
博客等级 码龄7年 33粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值