0

http://cplusplus.com/reference/string/basic_string/operator[]

const結果が必要な場合に警告を回避し、キャストを軽減するために戻る 2 番目のバージョンがあると有利であることは理解していますconstが、関数が既にconstメソッド以外 (メソッドではなく結果) を提供している場合、const-を宣言するポイントは何ですか?結果方法const

4

5 に答える 5

4

const2 番目の ( ) バージョンは異なる結果を返すだけでなく、次のようにマークされていることを理解する必要がありますconst(これはconst宣言の最後の 2 番目です)。

const_reference operator[] (size_type pos) const;

これらは 2 つの異なる点です:const非メソッドが存在する場合、戻り値自体は必要ありませんconst(非 const 戻り値は常にconstバージョンにキャストできるため)。

しかしconst、演算子のバージョンがないということは、const文字列オブジェクトで使用できないことを意味します。

const結果はconst、演算子自体の性質の結果にすぎません。const文字列があり、演算子を使用して単一の文字への参照を取得する場合、明らかにこの参照もそうでなければなりません(そうでない場合は、文字列const内の単一の文字を変更できます)。 const)。

于 2016-01-25T00:56:18.253 に答える
3

あなたが持っていると仮定します

const std::string str{"test"};
std::cout << str[2];

メンバ関数がない場合、暗黙的に渡されたポインタがis であるconstため、上記のコードは失敗します。thisoperator[]const

于 2016-01-25T00:44:55.397 に答える
2

const std::basic_string(non-const) を呼び出すことができない場合std::basic_string::operator[]は、そのままでは、const とマークされていません。

于 2016-01-25T00:45:04.550 に答える
1

関数のバージョンがない場合const、関数はconstインスタンスで呼び出すことができませんでした。例えば:

void func (const std::string &h)
{
    if (h[0] == "hello")
        ...
}

constのバージョンがない場合、これはどのように機能しoperator[]ますか?

于 2016-01-25T00:44:53.827 に答える
0

このconstメソッドは別の型を返し、const修飾された参照を返します。これは、constメソッドが使用される場合、メソッドの結果がconst修飾されている (したがって「不変」である) ことを意味します。修飾されていないメソッドは、const「可変」な通常の参照を返します。

メソッドだけを持つことはできません。さもなければconst、修飾されていないオブジェクトの個々の文字を変更することはできません。また、非メソッドだけを持つことはできません。そうしないと、修飾されたオブジェクトでメソッドを呼び出すことができなくなります。conststd::basic_stringconstconststd::basic_string

于 2016-01-25T00:46:18.800 に答える