Tôi đang tìm hiểu về quá tải toán tử trong C ++ và tôi thấy điều đó ==
và !=
chỉ đơn giản là một số chức năng đặc biệt có thể được tùy chỉnh cho các loại do người dùng xác định. Tuy nhiên, mối quan tâm của tôi là tại sao có hai định nghĩa riêng biệt cần thiết? Tôi nghĩ rằng nếu a == b
là đúng, thì a != b
tự động là sai, và ngược lại, và không có khả năng nào khác, bởi vì, theo định nghĩa, a != b
là !(a == b)
. Và tôi không thể tưởng tượng bất kỳ tình huống nào trong đó không đúng. Nhưng có lẽ trí tưởng tượng của tôi bị hạn chế hoặc tôi không biết gì?
Tôi biết rằng tôi có thể định nghĩa cái này theo nghĩa khác, nhưng đây không phải là điều tôi đang hỏi. Tôi cũng không hỏi về sự khác biệt giữa so sánh các đối tượng theo giá trị hoặc theo danh tính. Hoặc liệu hai đối tượng có thể bằng nhau và không bằng nhau cùng một lúc hay không (đây chắc chắn không phải là một lựa chọn! Những thứ này là loại trừ lẫn nhau). Những gì tôi đang hỏi là đây:
Có bất kỳ tình huống nào có thể trong đó việc đặt câu hỏi về hai đối tượng bằng nhau có ý nghĩa gì không, nhưng hỏi về việc chúng không bằng nhau không có ý nghĩa gì? (theo quan điểm của người dùng hoặc quan điểm của người thực hiện)
Nếu không có khả năng như vậy, thì tại sao trên Trái đất, C ++ lại có hai toán tử này được định nghĩa là hai hàm riêng biệt?
'undefined' != expression
luôn luôn đúng (hoặc sai hoặc không xác định), bất kể biểu thức có thể được đánh giá hay không. Trong trường hợp này a!=b
sẽ trả về kết quả chính xác theo định nghĩa, nhưng !(a==b)
sẽ thất bại nếu b
không thể đánh giá được. (Hoặc mất nhiều thời gian nếu đánh giá b
là tốn kém).
(NaN != NaN) == true