关于指针的const引用:为何可修改指针指向对象的值?
指针的const引用为何能修改指向对象的值?
你的代码里const auto &refOfPtr = ptr,auto会被推导为int*,所以refOfPtr的实际类型是int* const &——也就是指向int类型指针的const引用。
这里的const修饰的是指针本身,而非指针指向的对象,具体规则如下:
- 你不能通过
refOfPtr修改指针存储的地址,比如尝试执行refOfPtr = &another_int;会直接编译报错; - 但指针指向的对象(也就是代码里的
n)本身是可修改的int类型,所以通过解引用*refOfPtr来修改对象的值是完全合法的。
举个反例验证指针地址的约束:
int m = 20; refOfPtr = &m; // 编译错误:无法给const引用指向的指针重新赋值地址
这行代码会编译失败,证明指针的地址确实无法通过该const引用修改。而*refOfPtr = 10;是直接操作指针指向的int对象,不受const对指针本身的约束,因此能成功修改n的值。
简单总结:这个场景里的const只限制了“指针本身的地址不能被该引用修改”,并没有限制“指针指向的对象是否可修改”——只要对象本身是可修改的,解引用后就能更改它的值。
内容的提问来源于stack exchange,提问作者semicolon_missing
相关产品推荐
相关产品推荐

