C++中const引用参数含指针成员时能否修改指针指向对象?
问题解答
结论:你完全可以在ImportantFunc内部修改银行账户的信息,原因如下:
先明确const vector<People>& people_list的约束范围
这个const的作用分为两层:
- 不能修改
people_list容器本身——比如不能往里面添加/删除元素,不能改变容器的大小或内存地址; - 容器里的每个
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
相关产品推荐
相关产品推荐

