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 コマンドはミューテーター関数の定義 (上記の #2) を使用してデータにアクセスしています。
Cheese cheddar;
cout << cheddar[2] << endl;
データを取得するために最初の関数 (アクセサ) を使用しないのはなぜですか? cout は単なる検索なので、最初に発火すると思います。
コンパイラは、これらのどれを呼び出すべきかをどのように認識しますか?
編集:完全を期すために、ミューテーターとは、次のように「セッター」として使用されることを意味します。
cheddar[2] = 100;
両方を組み合わせると、次のようになります。
cheddar[2] = cheddar[1];
rhs は単なる「ゲッター」です。単純にcheddar[1]の値を取得し、何も変更しないため、const にすることができます。対照的に、lhs ブラケット オーバーロードcheddar[2]は「セッター」として機能します。値は変更でき、関数の戻り値を const にすることはできません。