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

在C++类的setter函数中使用const的作用是什么?

关于C++函数参数中const引用的疑问

我正在通过教材复习C++知识,期间遇到一段简化后的代码示例:

class MyClass{
private:
    int count;
    double price;
    string name;
public:
    void setValues(const int&, const double&, const string&);
};


void MyClass::setValues(const int& c, const double& p, const string& n){
    count = c;
    price = p;
    name= n;
}

int main(){
    myClass pOne;
    pOne.setValues(5, 0.75, "Kiwi");

    return 0;
}

我之前以为const关键字只是用来声明不可修改的常量,方便编译器优化。但这段代码里setValues的参数都用了const引用,我却能反复调用这个函数修改MyClass对象的属性,想请教这些参数用const的作用到底是什么?


这里的const是用来约束函数内部不能修改传入的参数本身,和你修改类的成员变量完全是两码事,具体作用分这几点:

  • 避免误操作修改参数:比如你在函数里不小心写了c = 10;,编译器会直接报错,防止你误改传入的原始数据(虽然这里是传引用,但加了const就锁死了参数的修改权限)。

  • 支持传入常量和临时对象:如果不用const引用,你直接传字面量(比如代码里的5、0.75、"Kiwi")或者临时生成的对象时,编译器会报错——因为非const引用不能绑定到临时值。加了const引用就没问题,这也是为什么代码里setValues(5, 0.75, "Kiwi")能正常运行的原因。

  • 性能优化(针对复杂类型):对于string这种非基本类型,传值会做一次拷贝,而传const引用可以避免拷贝开销,同时又保证不会修改原数据。像int、double这种基本类型,其实传值和传const引用性能差别不大,但很多人习惯统一写法,或者为了代码一致性这么做。

  • 代码可读性和语义明确:看到const引用参数,别人一眼就知道这个函数不会修改传入的参数,能快速理解函数的意图,减少阅读代码的成本。

简单说,这个const管的是函数里能不能改参数c、p、n,不管你能不能改类里的count、price、name,两者完全不冲突。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:06:24