Đó là một phong cách mã hóa (tên Yoda Conditions) để tránh phải viết =
thay vì ==
trong an-tuyên bố nếu, đó là hợp lệ để sử dụng phân =
trong một lệnh if-, nhưng nó thường không phải những gì bạn muốn.
Cá nhân, tôi không thích sử dụng như thế này bởi vì nó khó đọc và trình biên dịch hiện đại sẽ cảnh báo bạn khi bạn sử dụng =
trong câu lệnh if.
Cũng lưu ý rằng:
if(ptr == NULL)
là như nhau với if(!ptr)
.
- C++ 11 giới thiệu
nullptr
để thay thế bằng cách sử dụng NULL
. Vì vậy, để khởi tạo một con trỏ null, nó ưa thích để sử dụng ptr = nullptr
Về lý do tại sao sử dụng nullptr
qua NULL
:
Trước khi C++ 11, NULL
thường thực hiện trong nội bộ như #define NULL 0
, nhưng vấn đề là, 0
là cũng là số nguyên không. Nó có thể gây rắc rối trong một số tình huống. Ví dụ:
void func(int n);
void func(char *s);
func(NULL); //call which function?
Mặc dù Auther ngụ ý rằng NULL
là một loại con trỏ, nhưng trình biên dịch chỉ biết gọi func(0)
. Vì vậy, phiên bản đầu tiên sẽ được gọi.
Sử dụng func(nullptr)
, trình biên dịch sẽ biết đó là con trỏ và gọi phiên bản thứ hai.
Nguồn
2013-07-21 12:42:39
Tôi thường viết 'if (! Ptr)'. Nó ngắn hơn và ít dư thừa hơn. – glglgl
Tôi ít nhầm lẫn ở đây, cho dù câu hỏi của bạn là lý do tại sao bạn không thể sử dụng 'NULL == ptr' thay vì' ptr == NULL' hoặc câu hỏi của bạn là tại sao bạn không thể sử dụng '=' thay vì '== '? – Ravi
Tôi đã hỏi hai câu hỏi – minicaptain