tôi điều bình luận ban đầu GMAN của nên là câu trả lời được chấp nhận:
Tôi tự hỏi có gì sai với chỉ if (p)
Vấn đề là: gì là sai với nó, và này nên là cách ưu tiên. Trước hết, !!p
là “quá thông minh”; nó cũng hoàn toàn không cần thiết và do đó rất tệ (chú ý: chúng ta đang nói về con trỏ trong câu lệnh if
ở đây, vì vậy bình luận của Anacrolix, trong khi thường hợp lệ, không áp dụng ở đây!).
Điều tương tự cũng xảy ra với p != NULL
. Trong khi điều này là có thể, nó chỉ là không cần thiết. Đó là mã nhiều hơn, mã hoàn toàn thừa và do đó mã này làm cho mã tồi tệ hơn. Điều thực sự nhất mà Jeff Atwood từng nói là “mã tốt nhất không có mã nào cả.” Tránh cú pháp thừa. Dính vào mức tối thiểu (vẫn chuyển tải ý nghĩa đầy đủ; if (p)
là hoàn tất).
Cuối cùng, if (p)
được cho là cách thành ngữ nhất để viết điều này trong C++. C++ uốn cong về phía sau để có được hành vi tương tự này đối với các loại khác trong ngôn ngữ (ví dụ: luồng dữ liệu), với chi phí của một số quirks rất lạ. Phiên bản tiếp theo của tiêu chuẩn thậm chí còn đưa ra một cú pháp mới để đạt được hành vi này trong các kiểu do người dùng định nghĩa.
Đối với con trỏ, chúng tôi nhận được như nhau miễn phí. Vì vậy, sử dụng nó.
/EDIT: Về rõ ràng: sharptooth viết rằng
IMO so sánh với con trỏ null là rõ ràng hơn.
Tôi cho rằng đây là sai khách quan: if (p)
rõ ràng hơn. Không có cách nào có thể là tuyên bố này có thể có nghĩa là bất cứ điều gì khác, không phải trong bối cảnh này cũng không phải trong bất kỳ khác, trong C + +.
Nguồn
2009-10-22 09:48:14
Tôi tự hỏi có gì sai với chỉ 'if (p)'. – GManNickG
Hoàn toàn không có gì. :) – Twisol
Bạn nên luôn luôn là các toán tử đáng ngờ bị quá tải. Có thể '! P' hoặc'! = 'Có những hành vi đặc biệt. – Kobi