署名は以下のとおりです。基本型のconst参照を返すのはなぜですか?オペレータ<code>std::string::operator[]</code>の(のstd ::文字列::演算子[])
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
はなぜconstのバージョンの復帰const char&
だけではなく、char
していますか?
署名は以下のとおりです。基本型のconst参照を返すのはなぜですか?オペレータ<code>std::string::operator[]</code>の(のstd ::文字列::演算子[])
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
はなぜconstのバージョンの復帰const char&
だけではなく、char
していますか?
const
オブジェクトの目的はすべて変更できないためです。この場合、const
クラスメンバが文字列内の文字への変更可能な参照を返す場合は、それを変更できます。
operator[]
までは、&
演算子を使用してポインタを取得できるためです。結局、このようなものはかなり一般的です:あなたは、プレーン右辺値戻り値の型でそれを行うことができないだろう
auto *foo=&bar[baz];
。この場合、少なくともconst
ポインタを取得できます。
OPは 'const char&' vs 'char'(' char& 'ではなく)について質問しました。 –
@JamesAdkisonあなたは 'const'メンバーの宣言を見逃しましたか? –
はい、私はほとんどこの部分を見逃し、私の答えを更新しました。 –
このように '&s [i] + i ==&s [i + 1]'です。 –