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

C++中const引用参数含指针成员时能否修改指针指向对象?

问题解答

结论:你完全可以在ImportantFunc内部修改银行账户的信息,原因如下:

先明确const vector<People>& people_list的约束范围

这个const的作用分为两层:

  1. 不能修改people_list容器本身——比如不能往里面添加/删除元素,不能改变容器的大小或内存地址;
  2. 容器里的每个People对象都是const对象——也就是说,你不能修改People对象自身的成员,但这里的“修改”要分具体情况判断:

针对People的指针成员Bank* bank_account的约束

当People是const对象时,它的指针成员bank_account会被视为Bank* const(即指针本身的指向不能被修改),但指针指向的Bank对象并没有被const修饰。

举个实际代码例子:
假设Bank类有修改余额的接口:

class Bank {
public:
    void updateBalance(int new_val) {
        balance = new_val;
    }
private:
    int balance;
};

那么在ImportantFunc里,你可以这么写:

void ImportantFunc(const vector<People>& people_list) {
    // ❌ 非法:不能修改People对象的指针指向
    // people_list[0].bank_account = new Bank();

    // ✅ 合法:可以通过指针修改指向的Bank对象的内容
    people_list[0].bank_account->updateBalance(5000);
}

如何禁止修改银行账户?

如果想要彻底阻止在ImportantFunc里修改Bank对象,有两种常见方式:

  • 把People的成员改成const Bank* bank_account,这样指针指向的对象是const的,只能调用Bank的const成员函数;
  • 限制Bank类只提供const的查询接口,不暴露修改类内容的非const成员函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:25:07