Điều đó tùy thuộc.
Nếu &&
là toán tử logic ngắn mạch thông thường, thì sẽ tốt vì có một điểm chuỗi. array[x]
sẽ sử dụng giá trị mới.
Nếu &&
là người dùng (hoặc thư viện) đã định nghĩa toán tử quá tải, thì không có đoản mạch và cũng không đảm bảo điểm chuỗi giữa đánh giá x--
và đánh giá array[x]
. Điều này có vẻ không được đưa ra mã của bạn, nhưng không có ngữ cảnh thì không thể nói chắc chắn được. Tôi nghĩ rằng nó có thể, với định nghĩa cẩn thận của array
, để sắp xếp theo cách đó.
Đây là lý do tại sao luôn luôn là ý tưởng tồi để quá tải operator&&
.
Bằng cách này, if ((x > 0) && array[--x])
có hiệu ứng rất giống nhau (một lần nữa, giả sử không có toán tử quá tải shenanigans) và theo ý kiến của tôi rõ ràng hơn. Sự khác biệt là có hay không x
bị giảm 0 trong quá khứ mà bạn có thể hoặc không thể dựa vào.
Nguồn
2010-10-28 15:43:41
hãy nhớ giữ mã của bạn sạch sẽ để người khác đọc, ngay cả khi được xác định rõ ràng nó có thể giới thiệu sự cố nếu ai đó sau đó thay đổi hoặc thêm vào biểu thức. Chỉ cần 2c của tôi –
Thậm chí nếu nó có thể được xác định rõ, bạn không nên sử dụng mã loại như vậy. Bạn có thể hiểu nó khi bạn viết nó, nhưng peson tiếp theo có thể không. – codymanix
mã này không quá tệ sau khi tất cả. Tôi đã thấy mã tồi tệ hơn trong hạt nhân Linux: D – knittl