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

成员函数定义后面加const是什么功能:C++中const成员函数的作用

成员函数定义后面加const是什么功能:C++中const成员函数的作用

  • 前言
  • C++中const成员函数的作用
  • 总结

在这里插入图片描述

前言

在PX4的代码中的位置控制模块中,有这样一个成员函数

void getAttitudeSetpoint(vehicle_attitude_setpoint_s &attitude_setpoint) const;

该函数的功能是:在位置控制器经过更新后得到了期望的油门向量,通过这个函数转换为期望姿态值。

可以看到函数的声明和定义时,后面都加了一个const关键字在这个地方这个关键字是做什么用的呢?

在C++中,成员函数后的 const 关键字表示该函数是常量成员函数。

C++中const成员函数的作用

在C++中,成员函数后的 const 关键字表示该函数是常量成员函数,其作用如下:

1、不可修改对象状态

  • const 成员函数承诺不会修改类的非静态成员变量(除非成员被 mutable 修饰)。
  • 在函数内部尝试修改成员变量会导致编译错误(除非变量是 mutable 的)。

2、允许在const 对象上调用

  • 只有 const 成员函数才能被 const 对象调用。例如:
const PositionControl controller;
controller.getAttitudeSetpoint(...);  // 正确:调用 const 成员函数
PositionControl controller;
controller.getAttitudeSetpoint(...);  // 正确:非const对象也可以调用 const 成员函数
  • 非 const 成员函数无法在 const 对象上调用。
const PositionControl controller;
controller.setInputSetpoint(...);  // 错误:const对象只能调用 const 成员函数,而setInputSetpoint为非const 成员函数

3、 明确设计意图

  • 函数名后的 const 明确告知调用者:此函数仅用于查询或获取数据,不会改变对象内部状态。
  • 在示例中,getAttitudeSetpoint 用于获取姿态设定点,而非修改控制器状态,因此标记为 const 是合理的。

4、参数与 const 的关系

  • 示例中的参数 vehicle_attitude_setpoint_s &attitude_setpoint 是一个非 const 引用,函数可能通过此引用修改外部传入的对象。

  • 但函数本身的 const 仅约束对类内部状态的修改,不影响参数的行为。

总结

const 成员函数是 C++ 的常量正确性(const-correctness)机制,确保函数:

  • 不意外修改对象状态。
  • 可在 const 上下文中安全使用。
  • 提升代码可读性和安全性。

在示例中,getAttitudeSetpoint 用于获取姿态设定点,而非修改控制器状态,因此标记为 const 是合理的。

示例中的参数 vehicle_attitude_setpoint_s &attitude_setpoint 是一个非 const 引用,函数可能通过此引用修改外部传入的对象。

相关文章:

成员函数定义后面加const是什么功能:C++中const成员函数的作用

成员函数定义后面加const是什么功能:C中const成员函数的作用 前言C中const成员函数的作用总结 前言 在PX4的代码中的位置控制模块中,有这样一个成员函数 void getAttitudeSetpoint(vehicle_attitude_setpoint_s &attitude_setpoint) const;该函数的…...

QSNCTF-WEB做题记录

第一题&#xff0c;文章管理系统 来自 <天狩CTF竞赛平台> 描述&#xff1a;这是我们的文章管理系统&#xff0c;快来看看有什么漏洞可以拿到FLAG吧&#xff1f;注意&#xff1a;可能有个假FLAG哦 1&#xff0c;首先观察题目网站的结构和特征 这个一个文件管理系统&#x…...

UE引擎游戏加固方案解析

据VGinsights的报告&#xff0c;近年来UE引擎在过去几年中市场占比显著增长&#xff0c;其中亚洲市场增幅达到了30%&#xff0c;随着UE5的推出和技术的不断进步&#xff0c;UE引擎在独立开发者和移动游戏开发中的应用也在逐步增加。 UE引擎的优势在于强大的画面表现与视觉特效…...

统计函数运行时间的python脚本

这是一个统计函数运行时间的实用脚本&#xff0c;其中用到了函数的嵌套、链式传输参数&#xff0c;以及修饰器。 import time# 定义一个装饰器timer&#xff0c;用于计算被装饰函数的运行时间 def timer(func):print("执行了timer")def wrapper(*args, **kwargs):st…...

大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)

大模型WebUI&#xff1a;Gradio全解11——使用transformers.agents构建Gradio UI&#xff08;3&#xff09; 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…...

spring boot知识点5

1.如何你有俩套配置环境&#xff0c;运行时如何选择 如果有俩套配置环境&#xff0c;则需要三个yml application.yml 用于配置你用那个配置环境 application-dev.yml 用于开发配置环境 application-prod.yml 用于发布配置环境 spring:profiles:active: prod # 指定当前激…...

【C++】面向对象的三大特性

面向对象编程三大核心特性&#xff1a;封装、继承和多态。 1. 封装 封装指的是将数据和操作这些数据的方法绑定在一起&#xff0c;形成一个对象&#xff0c;并且隐藏对象的内部实现细节&#xff0c;只暴露必要的接口。封装的目的是保护数据&#xff0c;确保外部代码不能直接访…...

Docker构建时,设定默认进入的工作目录的方法

在 Docker 中,你可以通过不同的方式来设定容器默认进入的目录,以下针对不同场景分别介绍具体方法: 1. 使用 Dockerfile 设定工作目录 如果你是通过构建镜像的方式来运行容器,那么可以在 Dockerfile 中使用 WORKDIR 指令来设置容器启动时的默认工作目录。以下是具体步骤:…...

DeepSeek等大模型功能集成到WPS中的详细步骤

记录下将**DeepSeek功能集成到WPS中**的步骤&#xff0c;以备忘。 1. 下载并安装OfficeAI插件 访问OfficeAI插件下载地址&#xff1a;https://www.office-ai.cn/&#xff0c;下载插件&#xff08;目前只支持windows系统&#xff09;。 注意&#xff0c;有两个插件&#xff0…...

教学资料档案管理系统

本系统构建 JAVA 体系的后端系统&#xff0c;围绕以安全&#xff0c;可靠&#xff0c;高速&#xff0c;健壮&#xff0c;易于扩展为目标的方向进行开发&#xff0c;在阿里等开源库的基础上实现提供教学资料档案的管理系统的后端接口的微服务架构系统。 功能包含&#xff1a;系…...

linux core分析---TLS读取异常

文章目录 TLS概念core 线程调用栈查看堆栈: bt查看所有线程堆栈:core分析:锁分析代码修改:thread8 f 4 (第四层堆栈) jcallback.c:186**thread10 f4 SynStack.cpp:1175tl_send_message 加锁修改tls_table1 socket_tab加锁保护2 增加tls_table 中buse的使用3 tls_tl_read_mes…...

SpringBoot 排除一些包的注入

文章目录 需求一、使用 ComponentScan 需求 在系统迭代的过程中&#xff0c;有一些 Controller 大批量的不再使用&#xff0c;或者有一些接口我们不想再提供给外界 一、使用 ComponentScan SpringBootApplication(scanBasePackages "com.zrb.excludeSomePkg") Comp…...

PHP Composer:高效项目依赖管理工具详解

PHP Composer:高效项目依赖管理工具详解 引言 随着Web开发领域的不断扩展,项目的复杂性也在逐渐增加。为了提高开发效率,减少重复劳动,依赖管理工具应运而生。其中,PHP的Composer成为了开发者们的首选。本文将详细介绍PHP Composer的功能、使用方法以及在实际开发中的应…...

第四届图像、信号处理与模式识别国际学术会议(ISPP 2025)

重要信息 大会官网&#xff1a;www.icispp.com 大会时间&#xff1a;2025年3月28日-30日 大会地点&#xff1a;南京 简介 由河海大学和江苏大学联合主办的第四届图像、信号处理与模式识别&#xff08;ISPP 2025) 将于2025年3月28日-30日在中国南京举行。主要围绕图像信号处…...

【设计模式精讲】创建型模式之工厂方法模式(简单工厂、工厂方法)

文章目录 第四章 创建型模式4.2 工厂方法模式4.2.1 需求: 模拟发放奖品业务4.2.2 原始开发方式4.2.3 简单工厂模式4.2.3.1 简单工厂模式介绍4.2.3.2 简单工厂原理4.2.3.3 简单工厂模式重构代码4.2.3.4 简单工厂模式总结 4.2.4 工厂方法模式4.2.4.1 工厂方法模式介绍4.2.4.2 工厂…...

python:多重继承、MRO(方法解析顺序)

在 Python 中&#xff0c;当类存在多重继承时&#xff0c;方法的调用顺序由 方法解析顺序&#xff08;Method Resolution Order, MRO&#xff09; 决定。 Python 使用 C3线性化算法 来确定类的继承顺序&#xff08;MRO&#xff09;&#xff0c;其核心规则是&#xff1a; 子类优…...

Oracle RAC数据库单节点轮流重启

0、sqlplus / as sysdba 备份参数文件 create pfile/home/oracle/pfile.ora from spfile; 备份控制文件 Alter database backup controlfile to trace; 1、关闭两节点的监听&#xff1b; 2、操作系统层面kill掉所有LOCALNO的所有进程&#xff0c;即&#xff1a;连接会话。 p…...

电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?

尽管 TPM 2.0 已经内置在许多新电脑中&#xff0c;但很多人并不知道如何激活这一功能&#xff0c;甚至完全忽略了它的存在。其实&#xff0c;只需简单的几步操作&#xff0c;你就能开启这项强大的安全特性&#xff0c;为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...

Vue 3 中如何注册全局自定义组件:一个 SVG 图标的例子

Vue 3 中如何注册全局自定义组件&#xff1a;一个 SVG 图标的例子 嘿&#xff0c;小伙伴们&#xff01;今天我们来聊一下在 Vue 3 中如何注册一个全局的自定义组件。我知道有时候我们想要重复使用某些组件&#xff0c;比如说 SVG 图标&#xff0c;但不想在每个地方都重新定义。…...

SpringBoot+Vue3-学习笔记

1、SpringBoot特性 ①起步依赖&#xff0c;所有需要的依赖全部配置在一起 ②自动配置&#xff1a;遵循约定大约配置的原则&#xff0c;在boot程序启动后&#xff0c;一些bean对象会自动注入到ioc容器&#xff0c;不需要手动声明&#xff0c;简化开发 ③内嵌的Tomcat、Jetty(无…...

用BurpSuite和蚁剑实战SWPUCTF Web题:文件上传、HTTP头伪造与反序列化漏洞利用

BurpSuite与蚁剑实战指南&#xff1a;从CTF到真实渗透的Web漏洞利用 在网络安全竞赛和实际渗透测试中&#xff0c;文件上传、HTTP头伪造与反序列化漏洞是最常见的攻击面。本文将带你深入理解如何将CTF解题技巧转化为实战能力&#xff0c;通过BurpSuite和蚁剑这两款核心工具&…...

基于Docker部署AI语音合成服务:从VITS模型到私有化TTS实战

1. 项目概述&#xff1a;从“墨灵”镜像看AI语音合成工具的平民化之路最近在折腾一些AI应用&#xff0c;发现一个挺有意思的Docker镜像&#xff0c;叫gojue/moling。这名字乍一看有点摸不着头脑&#xff0c;但如果你对AI语音合成领域有所关注&#xff0c;尤其是中文TTS&#xf…...

华为WLAN双链路热备实战:从交换机配置到AP切换,保姆级排错指南

华为WLAN双链路热备实战&#xff1a;从交换机配置到AP切换&#xff0c;保姆级排错指南 当企业无线网络承载着核心业务流量时&#xff0c;单点故障可能导致整个办公区域陷入瘫痪。去年某金融数据中心就曾因AC控制器宕机&#xff0c;导致交易大厅200多个AP集体离线&#xff0c;直…...

ViGEmBus终极指南:免费解决Windows游戏手柄兼容性问题

ViGEmBus终极指南&#xff1a;免费解决Windows游戏手柄兼容性问题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过这样的烦恼&#xff1a;心…...

机器学习中的概率论核心与应用实践

1. 概率在机器学习中的核心地位作为一名长期从事机器学习实践的工程师&#xff0c;我深刻体会到概率论对于这个领域的重要性。概率不仅仅是数学课上的一个抽象概念&#xff0c;而是我们处理现实世界数据不确定性的核心工具。在真实项目中&#xff0c;我们面对的数据永远存在噪声…...

【C++26反射元编程终极指南】:零基础到工业级模板抽象,3天掌握编译期类型自省与自动代码生成

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;C26反射元编程&#xff1a;从编译期自省到自动代码生成的范式革命 C26 正式将 std::reflexpr 与 std::meta::info 纳入核心语言特性&#xff0c;标志着静态反射&#xff08;Static Reflection&#xff…...

任务调度与重试平台开源完整流程(从 0 到持续维护)==写一个开源项目全流程

1) 目标能力&#xff08;MVP 先做这 6 个&#xff09;1. Cron 与一次性任务2. 任务入队执行&#xff08;异步&#xff09;3. 失败重试&#xff08;固定间隔/指数退避&#xff09;4. 最大重试后进入死信队列&#xff08;DLQ&#xff09;5. 幂等控制&#xff08;避免重复执行&…...

前端语音采集与识别:Qwen3-ASR-0.6B结合JavaScript实现浏览器端应用

前端语音采集与识别&#xff1a;Qwen3-ASR-0.6B结合JavaScript实现浏览器端应用 最近在做一个在线教育项目&#xff0c;需要给视频课程加上实时字幕。一开始想用现成的云服务&#xff0c;但考虑到成本、数据隐私和网络延迟&#xff0c;就琢磨着能不能在用户自己的浏览器里搞定…...

Qianfan-OCR效果展示:手写体+印刷体混合文档的端到端结构化输出

Qianfan-OCR效果展示&#xff1a;手写体印刷体混合文档的端到端结构化输出 1. 工具概览 Qianfan-OCR是基于百度千帆InternVL架构开发的单卡GPU专属文档解析工具。它解决了传统OCR在处理复杂文档时的三大痛点&#xff1a; 混合内容识别难&#xff1a;传统工具无法同时处理印刷…...

4563453

4532543...