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

为何成员函数值参数可加const,引用参数却不行?

问题解答

一、值参数的const不影响函数签名

对于值传递的参数(比如示例中的int),函数声明里的int和定义里的const int属于同一签名。因为值传递时,参数是原变量的独立副本,给值参数加const只是限制函数内部不能修改这个副本,不会改变函数的签名。C++标准里,这种"顶层const"不会参与函数签名的匹配,所以A::f(int)的声明和A::f(const int)的定义可以正常匹配,编译器不会报错。

二、引用参数的const会改变参数类型

引用参数的const属于"底层const",直接改变了参数的类型:

  • int&是对非const整数的引用,只能绑定到可修改的左值;
  • const int&是对const整数的引用,可以绑定到左值、右值甚至const变量。

当你把声明的A::g(int&)定义成A::g(const int&)时,相当于定义了一个类中未声明的新函数,编译器会判定这是一个不匹配的函数定义,因此触发编译错误。

总结

  • 顶层const(值参数的const)不影响函数签名,声明和定义可兼容;
  • 底层const(引用/指针的const)会改变参数类型,声明和定义必须严格一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 19:10:55