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

结构体const引用的内部元素能否修改?代码现象存疑求解

问题:const结构体引用为何能修改其引用成员?

在void DoWork(const int &n)中,n作为实参的const引用,无法被修改值。但如下代码中,包含int&成员的Test结构体,在接收const Test& test参数的doSth函数里,却能修改test.index的值,运行后输出100。为何test是const引用,其成员index却能被修改?

struct Test {
    int& index ;
};

void doSth(const Test& test) {
    test.index = 100;
};

int main() {
    int a = 3;
    Test test = {
      .index = a,
    };
    doSth(test);
    std::cout << test.index;
}

原理性解释

  • const的作用范围是结构体对象本身,而非引用成员指向的目标:当你使用const Test& test时,const仅限制test这个结构体实例的自身状态——你不能修改结构体成员的绑定关系(比如不能把test.index重新绑定到另一个int变量),但完全允许通过这个引用成员去修改它所指向的对象的值。
  • 引用成员的const特性规则:在const限定的结构体中,引用成员的类型不会自动变为const int&。引用本身的绑定关系是不可变的,const对结构体的限定只是禁止修改成员的绑定,而非禁止通过引用修改目标对象。也就是说,const Test里的index依然是int&类型,而非const int&,所以可以通过它修改指向的int变量。
  • 对比普通成员的差异:如果结构体成员是普通int而非int&,那么const Test&中的该成员会被视为const int,无法直接修改。但引用成员的特性决定了,const限定不会传递到它指向的对象上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:30:56