مشغل سريعة وقذرة! =
-
22-07-2019 - |
سؤال
في دروسي وأنا غالبا ما إرسال operator!=
سريعة عن طريق إعادة !(*this == rhs)
، منها مثلا:
class Foo
{
private:
int n_;
std::string str_;
public:
...
bool operator==(const Foo& rhs) const
{
return n_ == rhs.n_ && str_ == rhs.str_;
}
bool operator!=(const Foo& rhs) const
{
return !(*this == rhs);
}
};
وأنا لا أرى أي مشاكل واضحة مع القيام بذلك ولكن اعتقدت أن أسأل ما إذا كان أي شخص يعرف أي.
المحلول
وأعتقد أن هذا هو الأسلوب المفضل لتنفيذ operator!=
بحيث لا تكرر نفسك، وكان لديك علاقة سليمة مع ضمان operator==
.
نصائح أخرى
وتحديد operator!=
كما !operator==
هو على ما يرام
لحصول هذه الشركات ما يعادل تافهة تعريفها بسهولة، وأنا دائما استخدام <لأ href = "http://www.boost.org/doc/libs/1_37_0/libs/utility/operators.htm" يختلط = "نوفولو noreferrer" > Boost.Operators .
الحال مع operator==
وoperator!=
فقط (أي باستخدام <لأ href = "http://www.boost.org/doc/libs/1_37_0/libs/utility/operators.htm#equality_comparable2" يختلط = "نوفولو noreferrer" > equality_comparable <> ) لا يكسب الكثير جدا.
ولكن عندما كنت في حاجة أقل وأكبر من اللازم، أو مزيج من operator+
، operator*
الخ هذا يصبح مريحة للغاية.
مثال لقضيتك كما يلي
class Foo : private boost::equality_comparable< Foo >
{
private:
int n_;
std::string str_;
public:
...
bool operator==(const Foo& rhs) const
{
return n_ == rhs.n_ && str_ == rhs.str_;
}
};
لا، هذا تماما ما يرام - أفعل بالضبط نفس