2016-05-23 4 views
3

strcmp()関数を使用せずに2つの文字列を比較したい場合は、==演算子をオーバーロードして2つの文字列を比較できますか?C++で `==`演算子をオーバーロードして2つの文字列を比較できますか?

+0

'オペレータ=='既にのstd :: STRING' 'のためにオーバーロードされる(符号ブロック)私のために働きました。したがって、 'std :: string(str1)== std :: string(str2)'のようなことができます。 – 101010

+0

独自のネームスペースにさらにオーバーロードを追加できます。 –

答えて

9

operator==をCスタイルの文字列でオーバーロードするとしたら、答えはいいえです。 operator overloadingは、オペランドのオペレータをユーザ定義タイプにカスタマイズするために使用されています。規格から

、$ 13.5/6オーバーロードオペレータ[over.oper](強調鉱山)

オペレータ機能者はいずれであっても非静的メンバ関数または を有する非メンバ関数でありますクラスの型が の少なくとも1つのパラメータ、クラスへの参照、列挙型、または 列挙型への参照。

(注)std::stringを意味している場合、答えはまだありませんです。 STLはstd::stringoperator==の実装を提供しており、変更することはできません。実際、あなたはそれをまったく過負荷にする必要はありません、ただそれを使っても問題ありません。

EDIT

あなたがあなた自身のクラスのためにそれをオーバーロードしたい場合は、それは大丈夫です。このような

Class X { 
    //... 
}; 
bool operator==(const X& lhs, const X& rhs) { 
    // do the comparison and return the result 
} 

として、その後

X x1, x2; 
//... 
if (x1 == x2) { 
    //... 
} 
+0

私はデータのメンバーとしてchar配列を持つクラスを作成し、このクラスの2つのオブジェクトを作成すると言っています。これらのオブジェクトを '=='のオーバーロードで比較できますか? – a874

+0

@ a874もちろん可能です。ちょうどそれを実装します。 – songyuanyao

+2

@ a874はい、できますが、 'std :: string'があるので必要ありません。 – user2807083

2

は、それがすでに過負荷状態ではないですか? );

#include<iostream> 
#include<cstring> 
int main() 
{ 
    std::string a = "Ala"; 
    std::string b = "Ala"; 
    if(a==b) 
     std::cout<<"same\n"; 
    else 
     std::cout<<"but different\n"; 
} 

コードは、上記

関連する問題