http://cplusplus.com/reference/string/basic_string/operator[]
const
結果が必要な場合に警告を回避し、キャストを軽減するために戻る 2 番目のバージョンがあると有利であることは理解していますconst
が、関数が既にconst
メソッド以外 (メソッドではなく結果) を提供している場合、const
-を宣言するポイントは何ですか?結果方法const
?
http://cplusplus.com/reference/string/basic_string/operator[]
const
結果が必要な場合に警告を回避し、キャストを軽減するために戻る 2 番目のバージョンがあると有利であることは理解していますconst
が、関数が既にconst
メソッド以外 (メソッドではなく結果) を提供している場合、const
-を宣言するポイントは何ですか?結果方法const
?
const
2 番目の ( ) バージョンは異なる結果を返すだけでなく、次のようにマークされていることを理解する必要がありますconst
(これはconst
宣言の最後の 2 番目です)。
const_reference operator[] (size_type pos) const;
これらは 2 つの異なる点です:const
非メソッドが存在する場合、戻り値自体は必要ありませんconst
(非 const 戻り値は常にconst
バージョンにキャストできるため)。
しかしconst
、演算子のバージョンがないということは、const
文字列オブジェクトで使用できないことを意味します。
const
結果はconst
、演算子自体の性質の結果にすぎません。const
文字列があり、演算子を使用して単一の文字への参照を取得する場合、明らかにこの参照もそうでなければなりません(そうでない場合は、文字列const
内の単一の文字を変更できます)。 const
)。
あなたが持っていると仮定します
const std::string str{"test"};
std::cout << str[2];
メンバ関数がない場合、暗黙的に渡されたポインタがis であるconst
ため、上記のコードは失敗します。this
operator[]
const
const std::basic_string
(non-const) を呼び出すことができない場合std::basic_string::operator[]
は、そのままでは、const とマークされていません。
関数のバージョンがない場合const
、関数はconst
インスタンスで呼び出すことができませんでした。例えば:
void func (const std::string &h)
{
if (h[0] == "hello")
...
}
const
のバージョンがない場合、これはどのように機能しoperator[]
ますか?
このconst
メソッドは別の型を返し、const
修飾された参照を返します。これは、const
メソッドが使用される場合、メソッドの結果がconst
修飾されている (したがって「不変」である) ことを意味します。修飾されていないメソッドは、const
「可変」な通常の参照を返します。
メソッドだけを持つことはできません。さもなければconst
、修飾されていないオブジェクトの個々の文字を変更することはできません。また、非メソッドだけを持つことはできません。そうしないと、修飾されたオブジェクトでメソッドを呼び出すことができなくなります。const
std::basic_string
const
const
std::basic_string