当前位置: 首页 > news >正文

C++小问题

 怎么分辨const修饰的是谁 是限定谁不能被改变的?

        在C++中,const关键字的用途和位置非常关键,它决定了谁不能被修改const可以修饰变量、指针、引用等不同的对象,并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们明确代码中哪些部分不能被改变

  • const修饰普通类型变量,修饰的变量的值不能被改变。
  • const int* ptr  ptr指向的值不能被改变
  • int* const ptr ptr指向的地址不能别改变 指向地址的值可以被改变 引用的底层原理
  • const int* const ptr ptr指向的地址和地址存储的值都不能被改变        
  • const int& ptr 常量引用 本来就不能改变引用指向 const修饰后引用的值也不能被改变

const的实际作用取决于它在声明中的位置。

两种在vector中删除元素的方法

1. std::remove + erase

nodes.erase(remove(nodes.begin(), nodes.end(), node), nodes.end());

        这个方法是先通过remove先把k个与node匹配的元素移动到vector的最后 然后实现O(k)时间复杂度的删除操作。适合当数组中存在多个与node相匹配的元素时候使用。

2. std::find + erase

auto it = find(nodes.begin(), nodes.end(), node);
if (it != nodes.end()) {nodes.erase(it);
}

        这个方法是通过find找到一个和node匹配的元素的迭代器,然后直接通过迭代器删除这个元素,总体是O(n)的时间复杂度,比较适合当数组中的元素是唯一的时候使用。

Map和unorderedMap的区别

C++类的大小由什么决定? 

  1. 成员变量的大小:普通成员变量,数组成员变量
  2. 虚函数表和虚函数:如果类中定义了一个虚函数那么他会有一个虚函数表,类中会存储一个指向虚函数表的指针,虚函数表中存储指向虚函数的指针
  3. 继承关系:如果子类继承了一个基类,那么子类会继承父类的成员变量和虚函数,如果父类有虚函数,子类会继承父类的虚函数指针。
  4. 对齐:类中的成员变量会根据其类型要求进行内存对齐,为了满足对齐要求,编译器会在成员之间填充字节来满足对齐要求。

为什么C语言不能重载,C++可以

        C语言缺少C++中的名称修饰机制,C语言的编译器无法分辨参数列表不同的同名函数,如果定义多个参数列表不同的同名函数,在调用函数的时候C语言的编译器无法分辨要调用的函数是哪个,会导致二义性。

函数重写和函数隐藏

        函数重写:子类重写父类的虚函数,必须是虚函数,只有参数列表不同。创建一个父类指针指向子类对象就可以通过指针指向的对象来调用子类重写的虚函数。

        函数隐藏:如果参数列表相同是函数重写,如果函数同名但是参数列表不同就是函数隐藏

子类指针可以调用父类函数吗?

        子类指针可以调用父类函数,前提是子类没有隐藏该函数。如果子类没有隐藏父类的函数(即,子类中没有定义同名但参数不同的函数),那么子类指针可以调用父类中的虚函数(如果该函数在父类中是虚拟的)。

        如果要调用的父类虚函数已经被子类重写了,子类指针调用这个虚函数是会默认调用子类中重写后的函数,如果想调用父类的重写之前的函数可以通过子类中的函数来使用作用域解析符来间接调用父类被重写的函数。

让类只能在栈或者堆上创建对象

只能在栈上创建对象

 // 禁止堆上分配:删除 operator newvoid* operator new(std::size_t size) = delete;
// 禁止堆上删除:删除 operator deletevoid operator delete(void* pointer) = delete;

        但事实上这种方法并不能实现限制类只能在栈上创建对象的目的,因为还可以通过  ::  全局作用域解析符来使用全局的new

只能在堆上创建对象

        把析构函数设置为私有,由于创建在栈上的对象是由编译器自动分配和释放内存空间的,当在栈上创建对象时编译器会检查类的析构函数是否可用,如果不可用则编译器不会在栈上为对象分配空间。

声明和定义的对比

如何阻止类创建对象

  1. 将构造函数私有化或者删除构造函数
  2. 将类设置为抽象类
  3. 禁止拷贝构造和赋值操作符

为什么抽象类不能实例化

  • 抽象类不能实例化的原因是它包含至少一个纯虚函数,这使得它成为一个不完整的类。
  • 抽象类的设计目的是提供接口或基础实现,而具体的行为和实现应由派生类提供。
  • 抽象类可以被派生类继承,并在派生类中实现纯虚函数,从而允许派生类的实例化。

C++的成员函数能调用this指针吗

        成员函数可以使用 this 指针。this 指针是一个指向调用该成员函数的对象的指针。

什么是野指针、悬空指针、空指针

空指针:在C语言中用NULL来表示空指针((void*)0)C++中的空指针是nullptr 代表0

相关文章:

C++小问题

怎么分辨const修饰的是谁 是限定谁不能被改变的? 在C中,const关键字的用途和位置非常关键,它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象,并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…...

avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close

avcodec_alloc_context3 是创建编解码器上下文,需要使用 avcodec_free_context释放 需要使用avcodec_free_context 释放 /** * Allocate an AVCodecContext and set its fields to default values. The * resulting struct should be freed with avcodec_free_co…...

强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(下)

由于平台字数限制,上文:https://blog.csdn.net/ooblack/article/details/144198538 4. PPO算法 近端策略优化(proximal policy optimization,PPO)算法是OpenAI的默认强化学习算法,在RLHF中也用到了这个算…...

计算机网络:IP协议详细讲解

目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前,我们学习了传输层中的TCP和UDP,重点是TCP协议,他帮我们解决具体到主机的哪个应用(端口)、传输的可靠(序列号、校验和…...

2024信创数据库TOP30之华为Gauss DB

近日,由DBC联合CIW/CIS共同发布的“2024信创数据库TOP30”榜单正式揭晓,汇聚了国内顶尖的数据库企业及其产品,成为展示中国信创领域技术实力与发展潜力的重要平台。在这份榜单中,华为的GaussDB凭借其卓越的技术实力、广泛的行业应…...

在线家具商城基于 SpringBoot:设计模式与实现方法探究

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作,但是…...

九、Spring Boot集成Spring Security之授权概述

文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…...

python之Flask入门—路由参数

语法&#xff1a; /routerName/<string:parameter_name> 其中&#xff1a;routerName代表路由名称<>中的string是参数类型&#xff0c;parameter_name为参数名称 参数类型&#xff1a; &#xff08;1&#xff09; string 接收任何没有斜杠&#xff08;/&#x…...

txt地图格式处理

1、txt地图格式 [属性描述] 坐标系2000国家大地坐标系 几度分带3 投影类型高斯克吕格 计量单位米 带号38 精度0.001 转换参数,,,,,, [地块坐标] 5,475.888,1,测试地块1,面,J50G077061,公路用地,地下, J1,1,113.22222222222222,23.129111721551794 J2,1,113.2722314…...

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿&#xff0c;数据挖掘的小伙伴们&#xff01;今天我要给你们介绍一本超级实用的书——《数据挖掘&#xff1a;概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作&#xff0c;由该领域的知名专家编写&#xff0c;系统性地介绍了在高维数据空间中分析和提取大量…...

GitLab CVE-2024-8114 漏洞解决方案

漏洞 ID 标题严重等级CVE ID通过 LFS 令牌提升权限高CVE-2024-8114 GitLab 升级指南GitLab 升级路径查看版本漏洞查询 漏洞解读 此漏洞允许攻击者使用受害者的个人访问令牌&#xff08;PAT&#xff09;进行权限提升。影响从 8.12 开始到 17.4.5 之前的所有版本、从 17.5 开…...

request和websocket

当然&#xff0c;可以为你详细介绍 FastAPI 中的 Request 对象。Request 对象在 FastAPI 中扮演着重要的角色&#xff0c;负责封装来自客户端的 HTTP 请求信息。了解 Request 对象的使用方法和属性&#xff0c;有助于你更高效地处理请求数据、访问请求上下文以及进行各种操作。…...

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…...

短视频矩阵的营销策略:批量混剪实现高效传播

在当今的商业环境中&#xff0c;短视频营销已成为企业获得市场份额的关键策略。随着消费者注意力的分散&#xff0c;传统营销方法的效果逐渐减弱。因此&#xff0c;短视频营销的重要性不言而喻。通过短视频&#xff0c;品牌能够以更为生动和直观的方式传递信息&#xff0c;从而…...

朗迪锋亮相2024人因工程与智能系统交互国际会议

2024年11月28日至30日&#xff0c;2024人因工程与智能系统交互国际会议在深圳隆重举办。此次大会以推动我国人因工程学科发展为目标&#xff0c;致力于加强国际学术交流&#xff0c;深入探讨人工智能时代的智能系统交互&#xff0c;旨在培育新质生产力&#xff0c;助力经济社会…...

spring boot3.3.5 logback-spring.xml 配置

新建 resources/logback-spring.xml 控制台输出颜色有点花 可以自己更改 <?xml version"1.0" encoding"UTF-8"?> <!--关闭文件扫描 scanfalse --> <configuration debug"false" scan"false"><springProperty …...

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…...

一次Kafka启动失败引出的问题

背景 Some time&#xff0c;有个现场童鞋说咱的Kafka实例有个broker一直crash&#xff0c;还截图给我看了&#xff0c;大致是Kafka启动加载topic分区日志文件的时候&#xff0c;然后就没了&#xff0c;连个WARN都没有。当然&#xff0c;光看这个截图咱啥都不知道&#xff0c;因…...

mysql 查询所有的触发器

SELECTTRIGGER_SCHEMA AS Database,TRIGGER_NAME AS Trigger,EVENT_OBJECT_TABLE AS Table,EVENT_MANIPULATION AS Event,ACTION_STATEMENT AS Statement FROMinformation_schema.TRIGGERS;创建触发器遇到报错&#xff1a; You do not have the SUPER privilege and binary lo…...

704. 二分查找 C++

文章目录 一、题目链接二、参考代码三、所思所悟 一、题目链接 链接: 704. 二分查找 二、参考代码 int search(const vector<int>& nums, int target) {int left 0; int right nums.size() - 1;//左闭右闭[]while (left < right){int mid (left right) / 2;…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...