用于分配和检索的支架过载; const,参考

kmi*_*las 1 c++ overloading brackets accessor mutators

关于在C++中重载括号,我的编译器使用mutator方法进行访问.谁能告诉我为什么?

1. const int & Cheese::operator [] (int i)const { return weight[i]; } //accessor
2. int & Cheese::operator [] (int i) { return weight[i]; } //mutator
Run Code Online (Sandbox Code Playgroud)

例如,下面的cout命令使用mutator函数定义 - 上面的#2 - 来访问数据.

Cheese cheddar;
cout << cheddar[2] << endl;
Run Code Online (Sandbox Code Playgroud)

为什么这不使用第一个函数 - 访问器 - 来获取数据?我认为,因为cout只是一个检索,它会在第一个开始.

编译器如何知道调用哪些内容?

编辑:为了完整性,通过mutator,我的意思是用作"setter",就像这样:

cheddar[2] = 100;
Run Code Online (Sandbox Code Playgroud)

两者合在一起如下:

cheddar[2] = cheddar[1];
Run Code Online (Sandbox Code Playgroud)

rhs只是一个"吸气剂".它只是检索cheddar [1]的值,不会改变任何东西,因此可以是const.相比之下,lhs括号过载切达[2]起到"定位器"的作用.值可以改变,函数返回值不能是常量.

Bau*_*gen 5

它为任何常量实例(如const Cheeseconst Cheese&)调用第一个,为可变实例调用第二个.