UE学习日志#18 C++笔记#4 基础复习4 指派初始化器和指针

1 指派初始化器

        C++20引入了指派初始化器,以使用他们的名称初始化所谓聚合的数据成员。

        聚合类型是满足以下限制的数组类型的对象或结构或类的对象:

        1.仅public数据成员,

        2.无用户声明或继承的构造函数,

        3.无虚函数和无虚基类、private或protected的基类

        指派初始化的顺序必须与声明顺序相同,不允许混合使用指派初始化器和非指派初始化器。未使用指派初始化器初始化的任何数据成员都将使用其默认值进行初始化,这意味着:

        拥有类内初始化器的数据成员会得到该值

        没有类内初始化器的数据成员会被零初始化

例如:

struct Employee{char firstInitial;char lastInitial;int employeeNumber;int salary{75000};
}

用统一初始化语法初始化:

Employee anEmployee{'J','D',42 ,80'000};

使用指派初始化器:

Employee anEmployee{.firstInitial = 'J',.lastInitial = 'D',.employeeNumber= 42,.salary =80'000
};

省略的成员将调用零初始化,而有默认初始化的成员将按其默认值进行初始化。

2 指针

2.1 栈和自由存储区

        C++程序中的内存分为两部分——栈(stack)和自由存储区(free store)。

        自由存储区是与当前函数或栈帧完全独立的内存区域。必须确保释放(删除)在自由存储区上分配的任何内存,这个过程不会自动完成,除非使用了智能指针。

2.2 指针

int* myIntegerPointer;

所声明的变量引用/指向某个整数内存,如上未初始化会指向某个随机位置 

int* myIntegerPointer{nullptr};

空指针是一个特殊的默认值,有效的指针都不含该值,在布尔表达式中使用时会被转换为false

 使用new操作符分配内存:

myIntegerPointer = new int;

使用解引用访问:

 *myIntegerPointer=8;

delete释放内存:

delete myIntegerPointer;
myIntegerPointer = nullptr;

也可以声明指向栈中变量甚至指向其他指针的指针:

int i {8};
int* myIntegerPointer{&i};

C++使用特殊语法处理指向结构体或类的指针:

“->”同时解引用并访问字段

Employee* anEmployee{getEmployee()};
cout<<(*anEmployee).salary<<endl;
//等价于
cout<<anEmployee->salary<<endl;

与指针一起使用:

bool isVaildSalary{(anEmployee!=nullptr && anEmployee->salary > 0 ) }

2.3 动态分配数组

int arraySize{8};
int* myVariableSizedArray{new int[arraySize]};

这种情况下指针变量仍然在栈中,但动态创建的数组在自由存储区中。

释放:

delete[] myVariableSizedArray;
myVariableSizedArray = nullptr;

2.4 const与指针

这两种写法都是无法更改ip指向的值

const int* ip;
ip=new int[10];
ip[4]=5;//Does not compile!int const* ip;
ip=new int[10];
ip[4]=5;//Does not compile!

如果想将ip本身标记为const,而不是他指向的值,需要这样写:

int* const ip{nullptr};
ip=new int[10];//Does not compile!
ip[4]=5;// 也可以初始化指向新分配的内存
int* const ip{new int[10]};

如果想本身和指向的值都标记为const,可以这样:

int const* const ip{nullptr};
const int* const ip{nullptr};

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

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

相关文章

react中useEffect的使用

2.useEffect-清楚副作用

SAP SD学习笔记28 - 请求计划(开票计划)之2 - Milestone请求(里程碑开票)

上一章讲了请求计划&#xff08;开票计划&#xff09;中的 定期请求。 SAP SD学习笔记27 - 请求计划(开票计划)之1 - 定期请求-CSDN博客 本章继续来讲请求计划&#xff08;开票计划&#xff09;的其他内容&#xff1a; Milestone请求(里程碑请求)。 目录 1&#xff0c;Miles…

Java中对消息序列化和反序列化并且加入到Spring消息容器中

--- 参考项目&#xff1a;苍穹外卖。 在对没有Java中的数据序列化时&#xff0c;比如说时间格式&#xff1a; 时间的格式是这种没有格式化的效果&#xff0c;因为在给前端返回数据时&#xff0c;返回的结果并没有序列化。 所以&#xff0c;需要对返回的数据序列化。 首先需…

课题介绍:水下惯性/地形组合导航精度提升的理论与方法研究

本课题旨在研究提升水下惯性/地形组合导航精度的理论与方法&#xff0c;以满足我国在科学探索和国防领域日益增长的需求。通过结合几何学中的球面最短弧法则与航天/航海学的姿态控制原理&#xff0c;构建新型球面最短弧姿态控制法&#xff0c;旨在提高水下航向控制的精度。同时…

Maya软件安装步骤与百度网盘链接

软件简介&#xff1a; MAYA软件是Autodesk旗下的著名三维建模和动画软件。maya软件功能更为强大&#xff0c;体系更为完善&#xff0c;因此国内很多的三维动画制作人员都开始转向maya&#xff0c;maya软件已成为三维动画软件的主流。 百度网盘链接: https://pan.baidu.com/s…

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…

JVM的GC详解

获取GC日志方式大抵有两种 第一种就是设定JVM参数在程序启动时查看&#xff0c;具体的命令参数为: -XX:PrintGCDetails # 打印GC日志 -XX:PrintGCTimeStamps # 打印每一次触发GC时发生的时间第二种则是在服务器上监控:使用jstat查看,如下所示&#xff0c;命令格式为jstat -gc…

51单片机入门_01_单片机(MCU)概述(使用STC89C52芯片;使用到的硬件及课程安排)

文章目录 1. 什么是单片机1.1 微型计算机的组成1.2 微型计算机的应用形态1.3 单板微型计算机1.4 单片机(MCU)1.4.1 单片机内部结构1.4.2 单片机应用系统的组成 1.5 80C51单片机系列1.5.1 STC公司的51单片机1.5.1 STC公司单片机的命名规则 2. 单片机的特点及应用领域2.1 单片机的…

神经网络的数据流动过程(张量的转换和输出)

文章目录 1、文本从输入到输出&#xff0c;经历了什么&#xff1f;2、数据流动过程是张量&#xff0c;如何知道张量表达的文本内容&#xff1f;3、词转为张量、张量转为词是唯一的吗&#xff1f;为什么&#xff1f;4、如何保证词张量的质量和合理性5、总结 &#x1f343;作者介…

5. 【Vue实战--孢子记账--Web 版开发】-- 主页UI

我们在实现个人中心的时候简单的搭建了一个主页UI&#xff0c;但是这个主页并不是我们需要的&#xff0c;在这一节我们将一起实现主页UI的搭建。 一、功能 主页UI的原型如下: 首页UI原型包括左侧菜单和顶部header&#xff0c;左侧菜单包含多个功能模块的链接&#xff1a;首页…

Spring Boot 实例解析:从概念到代码

SpringBoot 简介&#xff1a; 简化 Spring 应用开发的一个框架整合 Spring 技术栈的一个大整合J2EE 开发的一站式解决方案优点&#xff1a;快速创建独立运行的 Spring 项目以及与主流框架集成使用嵌入式的 Servlet 容器&#xff0c;应用无需打成 war 包&#xff0c;内嵌 Tomcat…

精准化糖尿病知识问答(LLM+机器学习预测模型)

精准化糖尿病知识问答&#xff08;LLM机器学习预测模型&#xff09; 关键词&#xff1a;精准化&#xff1b;糖尿病&#xff08;慢病&#xff09; 这里主要是对APP部署途径的叙述&#xff0c;在这之前讨论两个问题&#xff1a; 慢性疾病适用什么样的预测模型。对于糖尿病等慢病…

本地部署DeepSeek

1、打开ollama,点击“Download” Ollamahttps://ollama.com/ 2、下载完成后&#xff0c;安装ollama.exe 3、安装完成后&#xff0c;按"windowsR",输入"cmd” 4、输入“ollama -v”&#xff0c;查看版本&#xff0c;表示安装成功 5、返回ollama网页&#xff0c…

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法&#xff0c;但并没有太多关注&#xff0c;直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》&#xff0c;为了同时整合两类数据&#xf…

【后端开发】字节跳动青训营Cloudwego脚手架

Cloudwego脚手架使用 cwgo脚手架 cwgo脚手架 安装的命令&#xff1a; GOPROXYhttps://goproxy.cn/,direct go install github.com/cloudwego/cwgolatest依赖thriftgo的安装&#xff1a; go install github.com/cloudwego/thriftgolatest编辑echo.thrift文件用于生成项目&…

Flutter_学习记录_Tab的简单Demo~真的很简单

1. Tab的简单使用了解 要实现tab(选项卡或者标签视图)需要用到三个组件&#xff1a; TabBarTabBarViewTabController 这一块&#xff0c;我也不知道怎么整理了&#xff0c;直接提供代码吧&#xff1a; import package:flutter/material.dart;void main() {runApp(MyApp());…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)

一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…

华硕笔记本装win10哪个版本好用分析_华硕笔记本装win10专业版图文教程

华硕笔记本装win10哪个版本好用&#xff1f;华硕笔记本还是建议安装win10专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win10专业版在功能以及安全性方面有着明显的优势&#xff…

Longformer:处理长文档的Transformer模型

Longformer&#xff1a;处理长文档的Transformer模型 摘要 基于Transformer的模型由于自注意力操作的二次复杂度&#xff0c;无法处理长序列。为了解决这一限制&#xff0c;我们引入了Longformer&#xff0c;其注意力机制与序列长度呈线性关系&#xff0c;使其能够轻松处理数…

第5章 公共事件

HarmonyOS通过公共事件服务为应用程序提供订阅、发布、退订公共事件的能力。 5.1 公共事件概述 在应用里面&#xff0c;往往会有事件。比如&#xff0c;朋友给我手机发了一条信息&#xff0c;未读信息会在手机的通知栏给出提示。 5.1.1 公共事件的分类 公共事件&#xff08…