自分で String クラスを設計し、operator[] 関数をオーバーロードしたいとします。選択肢は次のとおりです。
String operator[](const size_t index);
String& operator[](const size_t index);
const String& operator[](const size_t index) const;
const、non-const、および参照戻り型のその他の組み合わせ。
自分で String クラスを設計し、operator[] 関数をオーバーロードしたいとします。選択肢は次のとおりです。
String operator[](const size_t index);
String& operator[](const size_t index);
const String& operator[](const size_t index) const;
const、non-const、および参照戻り型のその他の組み合わせ。
aの[]
演算子はstring
、文字列ではなく文字を返します。状況に応じて、そのうちの 1 つまたは 2 つを実装する必要があります。
const char& operator[] ( size_t index ) const;
char& operator[] ( size_t index );
最初のものは、変更できない参照を生成します。文字列が不変であれば、それで十分です。
2 つ目は、変更可能な参照を生成します。これを使用して、変更時のコピーや参照カウントなどの巧妙なものを実装できます。
operator[]
一部の人々は、組み込みの operator[] に似ているため (負のインデックスもサポートしています)、また負の値の引数を検出できるようにするため (範囲外のチェックがある場合) 、 の符号付きパラメーター タイプを使用することを好みます。 )。
組み込み operator[] の呼び出しを評価するために C++ コンパイラが使用する型はptrdiff_t
であるため、次のような場合があります。
char &operator[](ptrdiff_t index);
char operator[](ptrdiff_t index) const;
私は通常、単純なint
パラメーター型を使用します。