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

C++中通过const限定对象调用非const成员函数为何报错?

问题原因解析

你混淆了mutable关键字的作用范围和成员函数const限定的规则,二者是独立的两套约束:

  • mutable修饰的是类成员变量,作用仅仅是:允许在const限定的成员函数内部,或者通过const类型的对象/指针/引用,修改该成员变量的值。你之前给a1.x、a1.y赋值成功,恰好就是mutable在正常发挥作用,和display函数的调用权限没有关系。
  • C++中调用成员函数时,会把调用对象的地址作为隐式的this参数传入函数:
    • 没有加const限定的普通成员函数,要求传入的this是非const类型的指针,也就是说只能通过非const的对象调用
    • 只有被标记为const的成员函数,才允许传入const类型的this指针,支持通过const对象调用

你的display函数没有加const限定,哪怕它内部只访问了mutable的成员,也不满足const对象的调用要求,所以编译器会抛出对应错误。

修复方案

你只需要给display函数加上const后缀即可,修改后的代码如下:

// 其他部分保持不变,只修改display函数的声明
void display() const
{
    std::cout << x << "," << y << "\n";
}

加上const之后,该函数就允许被const对象调用,同时因为你访问的x和y都是mutable修饰的,哪怕你在这个const函数里修改x、y也不会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:18:03