5

私は String クラスの実装の 1 つを見ていましたが、次のオーバーロードされた == 演算子に気付きました。

String f = "something";
String g = "somethingelse";
if (f == g)
    cout << "Strings are equal." << endl;

bool operator==(String sString)
{
    return strcmp(operator const char*(), (const char*)sString) == 0; 
}

operator const char*()正確に何に使用されているかを除いて、ほとんどの部分を理解しましたか? 私はオペレーターのオーバーロードに関する非常に基本的な知識を持っています。誰かがこれについてもう少し光を当てることができますか?

4

4 に答える 4

11

operator const char*()これは、メンバー関数への明示的な呼び出しです。このコードは同じことを行います:

return strcmp(static_cast<const char*>(*this), (const char*)sString) == 0;

しかし、そのコードには複数の問題があります。

  1. static_castC キャストを使用するべきではありませんが、右の引数にはC++ キャスト (例: ) を使用する必要があります。
  2. operator==メンバー関数ではなく、フリー関数にする必要があります
  3. 通常、文字列クラスにはoperator const char*
  4. Stringクラスが適切に実装されている場合、はoperator==両方のパラメーターを const 参照として受け取る必要があります。
于 2013-09-09T08:08:44.360 に答える
4

operator const char*()は古いスタイルの C キャストです。(float)int_var によって整数を float にキャストできるように、const char*asにキャストできます(const char*)string_var。ここで文字列をキャストしますconst char *

あなたが STLstd::stringに精通しているなら、これoperator const char*()は基本的にそこと同じ仕事をして.c_str()います。

于 2013-09-09T08:09:25.040 に答える
0

この演算子は、自身Stringconst char*strcmp にキャストして呼び出します。

于 2013-09-09T08:09:28.400 に答える