通过常量引用传递时修改对象

use*_*792 5 c++ reference pass-by-reference

我发现下面的行为真的很奇怪,这只是我代码中一个奇怪错误的原因。将带有引用的对象作为常量引用传递,然后使用这些引用来更改它们引用的对象是否被认为是不好的?我知道引用没有改变,但我会假设将对象作为 const ref 传递会使它的所有成员也成为 const 吗?

struct wrapr{
    int& a;
};

void mod(const wrapr& aaa){
    aaa.a = 1;
}


int main() {
  int b = 2;
  wrapr a {b};

  mod(a);
  std::cout << b;  // prints 1
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

奇怪的是,如果我要声明结构

struct wrapr{
    const int& a;
};
Run Code Online (Sandbox Code Playgroud)

那么代码将无法编译。我猜当你通过 const 引用传递一个对象时,我有什么心理模型,它与在它的所有成员变量上加上“const”前缀相同。显然情况并非如此。