กฎพื้นฐาน 3 ข้อ
1. อย่า Overload ถ้าความหมายไม่ชัดเจน
เมื่อความหมายของออเปอเรเตอร์ไม่ชัดเจนและ undisputed (ไม่ถูกยอมรับทั่วไป) ไม่ควร overload ควรสร้างฟังก์ชันที่มีชื่อชัดเจนแทน
หัวใจของกฎนี้: อย่าทำมัน (Don't do it) มีเพียงไม่กี่กรณีที่เหมาะสม เพราะยากที่จะเข้าใจ semantics ของออเปอเรเตอร์ เว้นแต่ใช้ใน domain ที่ well-known และ undisputed
2. คง Semantics เดิมของออเปอเรเตอร์
C++ ไม่จำกัด semantics ของ overloaded operators แต่ผู้ใช้จะคาดหวังพฤติกรรมมาตรฐาน เช่น a + b ควรเป็นการบวก ไม่ใช่การลบ
3. ให้ชุด Operations ที่เกี่ยวข้องครบถ้วน
Operators เกี่ยวข้องกัน หาก support a + b ควร support a += b ด้วย หาก support ++a ควร support a++ หาก support a < b ควร support a > b หาก copy-construct ได้ ควร assignment ได้
สรุป
ส่วนใหญ่ไม่ต้อง overload operators ควร overload เฉพาะเมื่อ well-defined และ well-suited แหล่งอ้างอิง: StackOverflow - Operator overloading rules