You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类成员函数名后const关键字的作用及位置疑问

C++类成员函数后的const关键字作用及位置说明

你好呀!我来帮你理清这个C++里的const成员函数问题,你的代码里的getWheels() const就是典型的const成员函数,咱们一步步说:

先对照你的代码

class Car { 
private: 
    int wheels; 
public: 
    void setWheels(const int numberOfWheels); 
    int getWheels() const; 
}; 

void Car::setWheels(int numberOfWheels) { 
    wheels = numberOfWheels; 
} 

int Car::getWheels() const { 
    return wheels; 
}

成员函数后加const的核心作用

这个const是用来标记该成员函数为“只读函数”,具体有两个关键意义:

  • 防止误修改类成员变量:在const成员函数内部,你不能修改任何非static的成员变量(除非成员变量被mutable修饰,这是特殊场景)。比如你要是在getWheels()里写wheels = 4;,编译器会直接报错,帮你避免不小心修改对象状态的bug。
  • 支持const对象调用:如果你定义了一个const Car myCar;,那么你只能调用它的const成员函数。比如myCar.getWheels()是合法的,但如果getWheels()没加const,编译器会拒绝这个调用——因为非const成员函数可能会修改对象,而const对象是不允许被修改的,这就是C++里的“const正确性”规则。

关于const的位置:绝对不能放在返回类型之前

你问的位置问题很关键:const必须放在函数参数列表的后面(不管是类内声明还是类外定义)。如果把const放在返回类型前面,比如const int getWheels(),那是修饰返回值的,意思是返回的int是const类型,这和成员函数的const完全是两回事——对getWheels()来说,返回const int没什么实际意义,但标记成员函数为const却直接关乎代码的安全性和可用性。

举个错误示例:如果你写成const int Car::getWheels(),这只是说返回的int不能被修改,但函数本身还是可以修改类的成员变量,也不能被const对象调用,完全达不到你想要的效果。

额外补充:const成员函数的重载

还有个实用小知识点:你可以重载成员函数的const版本和非const版本。比如:

class Car {
public:
    int& getWheels(); // 非const版本,返回引用可以修改成员变量
    int getWheels() const; // const版本,只能读取成员变量
};

这样,非const对象会调用第一个版本,const对象会调用第二个版本,灵活性拉满。

内容的提问来源于stack exchange,提问作者Natasha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:00:09