主页 > 电脑硬件  > 

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

成员函数定义后面加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成员函数的作用