网站主体注销,微信小程序开发多少钱,贵州做网站的,我想在购物网站做代理成员函数定义后面加const是什么功能#xff1a;C中const成员函数的作用 前言C中const成员函数的作用总结 前言
在PX4的代码中的位置控制模块中#xff0c;有这样一个成员函数
void getAttitudeSetpoint(vehicle_attitude_setpoint_s attitude_setpoint) 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 引用函数可能通过此引用修改外部传入的对象。