关于 C++ 中的重载括号,我的编译器使用 mutator 方法进行访问。谁能告诉我为什么?
1. const int & Cheese::operator [] (int i)const { return weight[i]; } //accessor
2. int & Cheese::operator [] (int i) { return weight[i]; } //mutator
例如,下面的 cout 命令使用 mutator 函数定义——上面的#2——来访问数据。
Cheese cheddar;
cout << cheddar[2] << endl;
为什么不使用第一个函数——访问器——来获取数据?我认为,由于 cout 只是一个检索,它会在第一个触发。
编译器如何知道要调用其中的哪一个?
编辑:为了完整起见,通过mutator,我的意思是用作“setter”,如下所示:
cheddar[2] = 100;
两者一起如下:
cheddar[2] = cheddar[1];
rhs 只是一个“吸气剂”。它只是检索cheddar[1]的值,不改变任何东西,因此可以是 const。相比之下,lhs 括号重载cheddar[2]用作“setter”;值可以改变,函数返回值不能是const。