سؤال

في دروسي وأنا غالبا ما إرسال 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_;
   }

};

لا، هذا تماما ما يرام - أفعل بالضبط نفس

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top