1

自分で 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、および参照戻り型のその他の組み合わせ。

4

2 に答える 2

3

aの[]演算子はstring、文字列ではなく文字を返します。状況に応じて、そのうちの 1 つまたは 2 つを実装する必要があります。

const char& operator[] ( size_t index ) const;
char& operator[] ( size_t index );

最初のものは、変更できない参照を生成します。文字列が不変であれば、それで十分です。

2 つ目は、変更可能な参照を生成します。これを使用して、変更時のコピーや参照カウントなどの巧妙なものを実装できます。

于 2012-08-25T11:06:30.310 に答える
1

operator[]一部の人々は、組み込みの operator[] に似ているため (負のインデックスもサポートしています)、また負の値の引数を検出できるようにするため (範囲外のチェックがある場合) 、 の符号付きパラメーター タイプを使用することを好みます。 )。

組み込み operator[] の呼び出しを評価するために C++ コンパイラが使用する型はptrdiff_tであるため、次のような場合があります。

char &operator[](ptrdiff_t index);
char operator[](ptrdiff_t index) const;

私は通常、単純なintパラメーター型を使用します。

于 2012-08-25T11:25:32.953 に答える