Я думаю, что оригинальный комментарий GMan должен быть принятым ответом:
Интересно, что не так с просто if (p)
Дело в том, что ничего не так с этим, и этот должен быть предпочтительным способом. Во-первых, !!p
«слишком умный»; это также совершенно не нужно и, следовательно, плохо (обратите внимание: мы говорим об указателях в выражении if
здесь, поэтому комментарий Anacrolix, хотя и в целом действительный, здесь не применяется!).
То же самое относится и к p != NULL
. Хотя это возможно, это просто не нужно. Это больше кода, это полностью избыточный код и, следовательно, это делает код хуже. Джефф Этвуд когда-либо говорил, что «лучший код - это вообще не код». Избегайте избыточного синтаксиса. Придерживайтесь минимума (который все еще передает полное значение; if (p)
является завершенным).
Наконец, if (p)
, пожалуй, самый идиоматичный способ написать это на C ++. C ++ наклоняется назад, чтобы получить то же поведение для других типов в языке (например, потоков данных), за счет некоторых очень странных причуд. Следующая версия стандарта даже вводит новый синтаксис для достижения этого поведения в пользовательских типах.
Для указателей мы получаем то же самое бесплатно. Так что пользуйся.
/ EDIT: про ясность: sharptooth пишет, что
Сравнение IMO с нулевым указателем более понятное.
Я утверждаю, что это объективно неправильно: if (p)
яснее. Нет никакого способа, которым это утверждение могло бы означать что-либо еще, ни в этом контексте, ни в любом другом, в C ++.