C++ 左值右值 || std::move() || 浅拷贝,深拷贝 || 数据类型

数据类型:

  1. 作用:决定变量所占内存空间的字节大小,和布局方式
  2. 基本数据类型:
    1. 算数类型:
      1. 整形(bool / char……扩展集 / int / long……)&& 浮点形(float/double……)
        1. 部分整形(除了bool && char的扩展集)会有更多的划分:
        2. 例如:int( int 有符号/ unsigned int无符号) ……
        3. 对于char(8bit):(char / signed char有符号-128---127 / unsigned char无符号0----256)
    2. 空类型void
  3. 复合类型:声明符/类型修饰符:(& / * / const…… ) + 基本数据类型
  4. 其他类型:对象(类/结构体)类型……

字面值常量:

  1. 定义:直接看就可以得到它的值,一望而知
  2. 这样的常量非常常见,如何知道它的类型?
  3. 字面值常量的数据类型:由本身决定,不用手动定义,由常量的形式和值决定
    1. 整形:可以写做二进制、十进制,八进制、十六进制
      1. 如何看整形的数据类型:
        1. 默认情况下:十进制(signed),八进制、十六进制(signed  / unsigned)
        2. 默认为算数类型int,也可以为long / long long,具体要在可以容纳当前值的情况下,取最小尺寸
        3. 其中short不能作为整形字面值的类型
    2. 浮点:默认为double类型的字面值
    3. 字符:‘ ’为char类型,
    4. 字符串:“ ”为const char* 类型->常量字符数组[],其中会在字符串末尾添加"\0"空字符
    5. 指针:   nullptr为指针类型字面值
    6. 布尔:true / false为bool类型字面值

变量:

  1. 对象:有具体类型,并且能存储数据,的内存空间

表达式:

  1. 概念:由一个或多个运算对象组成(不一定有运算符,比如:字面值42 / 常量a的值
  2. 一元/二元/三元/运算符:作用于 一/二/三 个运算对象
  3. 函数调用:fun();也算作特殊运算符
  4. 复杂表达式:含有多个运算符,计算方式:遵守:优先级,结合律,求值顺序

左值&&右值

  1. 左值:(存储在栈)
    1. 对象(持久对象)
    2.  变量,常量,数组,指针,引用,表达式……
    3. 对于常量,不能作为赋值语句的左侧
  2. 右值:(存储在寄存器)
    1. 具体数据(临时对象)
    2. 常量,表达式(变量的值),临时对象……
  3. 赋值=:要求左侧为可修改的左值(除了const),右侧为右值
  4. 表达式可以作为左值;用的是在内存的地址
  5. 也可以作为右值:使用的是内存的地址中存储的值(变量存储的id,对应的val)
  6. 注意赋值=语句中:左值可以被当作右值使用(它的值),右值(非对象)不能作为左值被赋值
  7. 作用:……

运算符与左值右值的关系:

  1. 运算对象:
    1. 要求左值:赋值的左侧,&取地址(取对象地址),*解引用,   递增递减
    2. 要求右值:……
  2. 返回值:
    1. 要求左值:赋值,*解引用(获取指针所指向地址上的对应的值),递增递减
    2. 要求右值:取地址(指向运算对象的指针)
  3. 因此,对于decltype()会根据()括号内是什么运算符,确定返回值
  4. 比如:&返回右值--type*类型,*返回左值----type&

浅拷贝 && 深拷贝

  1. 浅拷贝(默认拷贝构造):只复制对象内的基本数据类型的成员变量,而不复制对象内的指针成员变量所指向的内存空间id(指针同时指向一个地址)
  2. 深拷贝:会同时复制对象内的基本数据类型的成员变量和指针成员变量所指向的内存空间
  3. 浅拷贝的问题
    1. 内存泄漏:
      1. 同一个内存多次释放:由于浅拷贝导致多个对象共享同一块内存,当这些对象在析构时都会尝试释放这块内存,导致同一块内存被多次释放
    2. 空悬指针:
      1. 当浅拷贝的对象中的一个对象提前释放,其持有的内存会被释放,而其他对象仍持有指向该内存的指针,这些指针就变成了空悬指针
    3. 数据不一致:当其中一个对象修改这块内存中的数据时,其他对象的对应数据也会被同时修改,导致数据不一致的问题
  4. 如何避免:
    1. 使用智能指针:std::shared_ptrstd::unique_ptr
    2. 自定义拷贝构造函数
    3. 自定义赋值运算符
  5. 优缺点
    1. 浅拷贝节约内存操作和时间开销,但是会导致指针问题。
    2. 深拷贝需要更多的内存操作和时间开销,深拷贝通常是更安全、更可靠

拷贝构造 && 拷贝赋值:

  1. 实现类对象复制的两种特殊成员函数
  2. 拷贝构造,使用一个已存在的对象来初始化一个新对象时
  3. 拷贝赋值:将一个对象赋值给另一个已经存在的对象时

移动对象

  1. 移动对象:不会发生拷贝,大幅度提升性能
  2. 右值引用:
    1. &&绑定到右值的引用,绑定的为右值---将要销毁的对象
    2. 同时普通引用&为了方便区分,为左值引用(绑定的为左值---对象)
    3. 变量的值当作为表达式时可以有右值属性,但变量本身是左值,所以不能作为&&右值引用的绑定
    4. 作用:
      1. 移动语义:直接从临时对象中转移资源,而非通过拷贝
      2. 完美转发:参数的类型(左值或右值)和值类别(临时或持久)都能被正确无误地传递给目标函数
      3. 提高程序运行效率
  3. std::move():显示的将左值转换为对应的右值引用类型

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

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

相关文章

java-包装类 2

### 8. 包装类的应用场景 #### 8.1 集合框架 包装类在Java集合框架中得到了广泛应用,因为集合只能存储对象而不能存储基本数据类型。 java import java.util.HashMap; public class CollectionExample { public static void main(String[] args) { …

MySQL2(Mysql对数据的增删改 数据的备份和还原 单表查询 常用的聚合函数(⭐⭐))

目录 一、Mysql对数据的增删改 1. 增加数据(INSERT语句) 2. 修改数据(UPDATE语句) ​编辑 WHERE子句(⭐): ​编辑 3. 删除数据(DELETE语句) 删除数据&#xff0…

轮播图的制作大全

例如该样式: 1.Vue的方法(可实现自动轮播和左右按钮和下方原点按钮轮播) <div id="app"><div class="a" ref="b" @mouseenter="MouseFun(c)" @mouseleave="MouseFun(d)">//1.图片显示盒子<div class=&qu…

接受两个参数,并基于给定的概率(40%和60%)返回相应的参数值

function getRandomValue(param1, param2) {// 生成一个0到1之间的随机数const randomNum Math.random();// 定义40%和60%的概率const probability1 0.4; // param1的概率为40%const probability2 0.6; // param2的概率为60%// 根据概率返回相应的参数if (randomNum < pr…

2024最新算法:北极海鹦优化(Arctic puffin optimization,APO)算法求解23个函数,MATLAB代码

一、算法介绍 北极海鹦优化&#xff08;Arctic puffin optimization&#xff0c;APO&#xff09;算法是2024年提出一种智能优化算法。该算法模拟海鹦在空中飞行和水下觅食两个阶段的行为&#xff0c;旨在实现勘探与开发之间更好的平衡。该算法包括几个关键操作&#xff0c;包括…

CS-流量通讯特征修改-端口store证书流量通讯规则

免责声明:本文仅做技术交流与学习... 目录 1.修改默认端口&#xff1a; 2.去除store证书特征&#xff1a; 查看证书指纹&#xff1a; 生成证书指纹&#xff1a; 应用证书指纹&#xff1a; 3.去除流量通讯特征&#xff1a; 规则资源 http流量特征修改: https流量特征修改:…

PostgreSQL 日志管理与故障排查(十二)

1. 日志类型与配置 1.1 日志级别 PostgreSQL 提供多种日志级别&#xff0c;可根据需求配置详细程度。 ERROR&#xff1a;仅记录错误消息。WARNING&#xff1a;记录警告和错误消息。LOG&#xff1a;记录所有普通日志消息。DEBUG&#xff1a;记录详细的调试信息。 1.2 配置日…

DNF手游攻略:平民玩家角色打造保姆级攻略!云手机游戏辅助!

在《地下城与勇士》&#xff08;DNF&#xff09;手游中&#xff0c;角色的成长与装备的提升是每位玩家追求的目标。然而&#xff0c;对于不愿意投入大量金钱的平民玩家来说&#xff0c;如何在有限的资源下最大化提升角色战力是一项需要深思熟虑的挑战。本文将详细介绍平民玩家在…

鸿蒙开发网络管理:【@ohos.net.webSocket (WebSocket连接)】

WebSocket连接 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 使用WebSocket建立服务器与客户端的双向连接&#xff0c;需要先通过[createWebSocket]方法创建[WebSocket]对象&#xff0c;然后通…

c++ 常用的锁及用法介绍和示例

2024/6/21 14:20:10 在 C++ 中,常用的锁主要包括以下几种:std::mutex、std::recursive_mutex、std::timed_mutex 和 std::shared_mutex。这些锁可以帮助我们在多线程编程中保护共享数据,避免竞争条件。以下是每种锁的介绍及其用法示例: std::mutex std::mutex 是最基本的互…

初识仓颉语言

仓颉编程语言是一种面向全场景应用开发的通用编程语言&#xff0c;可以兼顾开发效率和运行性能&#xff0c;并提供良好的编程体验&#xff0c;主要具有如下特点&#xff1a; 语法简明高效&#xff1a;仓颉编程语言提供了一系列简明高效的语法&#xff0c;旨在减少冗余书写、提升…

接口测试代码和工具

通过python的requests给接口发送请求进行测试 #coding:utf-8 import requests class TestApi(): url_login "https://legend-sit.omodaglobal.com/api/auth/oauth2/token" url_topic_b "https://legend-sit.omodaglobal.com/api/community/topic_b/page?…

Python polars学习-07 缺失值

背景 polars学习系列文章&#xff0c;第7篇 缺失值 该系列文章会分享到github&#xff0c;大家可以去下载jupyter文件&#xff0c;进行参考学习 仓库地址&#xff1a;https://github.com/DataShare-duo/polars_learn 小编运行环境 import sysprint(python 版本&#xff1a;…

快手商品详情的应用范围和请求示例笔记

应用范围&#xff1a; 快手商品详情的应用范围广泛&#xff0c;主要体现在以下几个方面&#xff1a; 用户购买决策支持&#xff1a; 用户通过查看快手商品详情页&#xff0c;可以获取商品的详细信息&#xff0c;如名称、价格、库存、产地、规格、材质、功能特点等。 商品详…

Vue71-嵌套(多级)路由

一、需求 二、开发步骤 2-1、编写路由组件 2-2、编写路由规则 2-3、编写路由标签<router-link>、<router-view> 三、小结

计算预卷积特征

当冻结卷积层和训练模型时&#xff0c;全连接层或dense层(vgg.classifier)的输入始终是相同的。为了更好地理解&#xff0c;让我们将卷积块(在示例中为vgg.features块)视为具有了已学习好的权重且在训练期间不会更改的函数。因此&#xff0c;计算卷积特征并保存下来将有助于我们…

阿里云云服务器、ACR镜像服务、容器化实战:搭建企业应用

一、容器化基础知识 华为云免费试用服务器&#xff1a;https://activity.huaweicloud.com/free_test/index.html 阿里云docker容器教程&#xff1a;https://edu.aliyun.com/course/3111900/lesson/341807097 查询ip地址&#xff1a;www.ip138.com 二、容器化搭建企业应用实战 2…

2.中国菜刀使用详解(OWASP实战训练)

2.中国菜刀使用详解&#xff08;OWASP实战训练&#xff09;&#xff08;OWASP实战训练&#xff09; Webshell&#xff08;1&#xff09;shell2.php #eval 使用PHP函数&#xff0c;例如PHPinfo&#xff08;2&#xff09;Shell3.php #system 使用Linux系统命令&#xff0c;列如ls…

【已解决】Python报错:NameError: name ‘Image‘ is not defined

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《AI实战中的各种bug…

性能评测系列(PT-010):Spring Boot + MySQL,高并发insert

一、测试概述 测试场景 场景编号&#xff1a; PT-010场景描述&#xff1a; Java应用&#xff0c;MySQL单表写测试目的&#xff1a;指定规格、配置、环境下&#xff0c;Java应用数据库简单写场景负载能力评估。&#xff08;不含调优&#xff0c;所测结果未必是最优结果&#x…