Đó là thực hành tốt nhất (trong trường hợp này):So sánh điều hành quá tải
bool Foo::operator==(const Foo& other) {
return bar == other.bar;
}
// Implementation 1
bool Foo::operator!=(const Foo& other) {
return bar != other.bar
}
// Implementation 2
bool Foo::operator!=(const Foo& other) {
return !(*this == other);
}
Đối với các nhà khai thác như>, <, < =,> = Tôi sẽ đi với thực hiện 2 khi có thể. Tuy nhiên, cho! = Tôi nghĩ rằng thực hiện 1 là tốt hơn vì một cuộc gọi phương thức khác không được thực hiện, điều này có đúng không?
Tôi muốn viết nó theo cách tự nhiên nhất để thể hiện chính xác. Trình biên dịch có lẽ sẽ làm tốt công việc biên dịch nó theo cách bạn chọn. – Flexo
Ok cảm ơn. Là một lưu ý phụ, tôi biết rằng nếu == là quá phức tạp, thì việc thực hiện 2 sẽ tốt hơn, nhưng đó là một trường hợp khác. – blaze
Bạn nên thêm 'const' vào mỗi một trong các hàm. Cũng xem xét sử dụng các chức năng miễn phí chứ không phải là các hàm thành viên, vì các hàm trước đây là đối xứng đối với các loại và các chuyển đổi trong đó các hàm không phải là. Điều này quan trọng hơn nếu loại của bạn có thể được chuyển đổi hoàn toàn từ các loại khác. –