strcmp()
関数を使用せずに2つの文字列を比較したい場合は、==
演算子をオーバーロードして2つの文字列を比較できますか?C++で `==`演算子をオーバーロードして2つの文字列を比較できますか?
答えて
operator==
をCスタイルの文字列でオーバーロードするとしたら、答えはいいえです。 operator overloadingは、オペランドのオペレータをユーザ定義タイプにカスタマイズするために使用されています。規格から
、$ 13.5/6オーバーロードオペレータ[over.oper](強調鉱山)
オペレータ機能者はいずれであっても非静的メンバ関数または を有する非メンバ関数でありますクラスの型が の少なくとも1つのパラメータ、クラスへの参照、列挙型、または 列挙型への参照。
(注)std::string
を意味している場合、答えはまだありませんです。 STLはstd::string
にoperator==
の実装を提供しており、変更することはできません。実際、あなたはそれをまったく過負荷にする必要はありません、ただそれを使っても問題ありません。
EDIT
あなたがあなた自身のクラスのためにそれをオーバーロードしたい場合は、それは大丈夫です。このような
Class X {
//...
};
bool operator==(const X& lhs, const X& rhs) {
// do the comparison and return the result
}
として、その後
X x1, x2;
//...
if (x1 == x2) {
//...
}
私はデータのメンバーとしてchar配列を持つクラスを作成し、このクラスの2つのオブジェクトを作成すると言っています。これらのオブジェクトを '=='のオーバーロードで比較できますか? – a874
@ a874もちろん可能です。ちょうどそれを実装します。 – songyuanyao
@ a874はい、できますが、 'std :: string'があるので必要ありません。 – user2807083
は、それがすでに過負荷状態ではないですか? );
#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";
}
コードは、上記
- 1. C文字列の比較演算子
- 2. 文字列のC++でオーバーロード演算子
- 3. C++の演算子のオーバーロード(比較演算子)
- 4. C#演算子オーバーロード、文字列の書き換えですか?
- 5. オーバーロード文字列演算子+
- 6. <<演算子とC++の文字列のオーバーロード+演算子
- 7. オーバーロード比較です演算子「無効な演算子は、<」
- 8. C++ - アルファベット文字列 - '<'演算子オーバーロード
- 9. C++のstd ::文字列「==」演算子と方法を比較
- 10. MyStringクラスの比較演算子をオーバーロードしています
- 11. キーマルチセットの文字列演算子のオーバーロード
- 12. 文字列オーバーロード演算子 ">>"
- 13. 正しい文字列jquery演算子の比較方法=
- 14. 文字列の比較:演算子==()対のEquals()
- 15. 2つの文字列を、それが真である関係演算子と比較します。
- 16. 文字列の〜演算子をオーバーロードすることはできますか?
- 17. + =演算子をオーバーロードして文字列を返す方法は?
- 18. C:++で演算子のオーバーロード「:=」
- 19. C++でSTLソートを使用するための比較演算子のオーバーロード
- 20. C++オーバーロード:[] []演算子のオーバーロード
- 21. C++のオーバーロード添字演算子の2つのバージョン
- 22. Javaの論理演算子との文字列比較
- 23. ブールと代入演算子(C++)の文字列オーバーロード
- 24. 2つの文字列を個別の文字で比較します。C++
- 25. Xval演算子と比較演算子?
- 26. C++演算子+演算子+ =オーバーロード
- 27. C++:演算子オーバーロード、演算子+
- 28. C++オーバーロード演算子++
- 29. Cの2つのファイルの文字列を比較します。
- 30. "in"演算子を使用して文字列をintに比較/変換
'オペレータ=='既にのstd :: STRING' 'のためにオーバーロードされる(符号ブロック)私のために働きました。したがって、 'std :: string(str1)== std :: string(str2)'のようなことができます。 – 101010
独自のネームスペースにさらにオーバーロードを追加できます。 –