разница между if (указатель) vs if(указатель!= NULL) в c++ проблема cpplint
Я уже проверил этот пост могу ли я использовать if (указатель) вместо if (указатель != NULL)? и некоторые другие сообщения в сети.
но он не указывает никакой разницы между двумя утверждениями.
: как я бегу cpplint.py в моем коде cpp я нашел проблемы, где я проверяю указатели на NULL. Я предпочел проверить, используя simple
if(pointer) //statement1
но cpplint говорит, что вы должны проверить, как
if(pointer != NULL) //statement2
так Я просто хочу знать , есть ли преимущества statement2 над statement1 ? Есть ли некоторые сценарии, в которых statement1 может создать проблему ?
работает: насколько мне известно, есть никакой разницы в работе обоих операторов. Это просто изменение стиля кодирования.
Я предпочитаю использовать как statement1, потому что
- его Простой, Читаемый
- нет напряжения отсутствует (
=
) по ошибке над равенством (==
) в сравнении
но cpplint поднимает это как проблему, тогда может быть какая-то польза, которую я пропустил.
Примечание: Java также не поддерживает statement1.
5 ответов
нет, если pointer
на самом деле тип указателя нет никакой разницы, поэтому все здесь вопрос стиля кодирования. Стиль кодирования, в свою очередь, зависит от привычек в разных сообществах, поэтому не может быть общей рекомендации.
Я лично предпочитаю первый, потому что он короче и более точен и избегает использования фиктивного макроса NULL
.
В C NULL
могут быть очень разные вещи (целое число или указатель) и в C++ его использовать даже устаревший наше время. Вы должны по крайней мере использовать nullptr
, нет.
вы используете венгерскую нотацию, где можно определить, является ли переменная указателем. Пока он есть-родной или умный-разницы нет. Однако, когда кто-то меняет его на другой косвенный тип (например, std::optional<>
), то второй не удастся. Поэтому я предлагаю продолжать использовать первый: это не Java, это C++.
В C++, предполагая, что ptr
является указателем, сравнения if (ptr)
и if (ptr != NULL)
функционально эквивалентны.
В C++11 и более поздних версиях часто считается предпочтительным использовать альтернативу if (ptr != nullptr)
.
для простой проверки указателя, различия в этих вариантах очень стилистические. Механизмы могут немного отличаться, но конечный результат тот же.
cpplint, как и большинство автоматических шашек, имеет тенденцию - по умолчанию-жаловаться больше на нарушения некоторых принципов стиля больше, чем другие. Является ли какой-либо конкретный набор рекомендаций правильным или неправильным, зависит от того, что необходимо для вашего проекта.
для типов классов, которые можно разумно сравнить с указателем (например, типы интеллектуальных указателей), предпочтительный тест зависит от того, какой набор операций (операторы сравнения, неявные преобразования и т. д.) поддерживает этот тип.
на C
, onsider:
int *ptr=malloc(10*sizeof *ptr);
free(ptr); // though the memory is freed, the ptr is not auto-set to NULL
if (ptr)
{
printf ("ptr is not null\n");
}
таким образом, вы должны поставить
ptr=NULL; // ptr is explicitly made to point at nothing
// The above step is mandatory.
после free
.
так как ответ в тег if-statement
, можно было бы рекомендовать сделать
if ( ptr == NULL ) // This is mostly a coding style & improves readability?
или лучше
if ( NULL == ptr ) // less chances of error
Ну [ сайт ] говорит о cpplint
вот это :
автоматическая проверка, чтобы убедиться, что файл c++ следует стиль c++ Google руководство
Итак, опять же, это чей-то стиль, который имеет значение. Скажем, если вы вносите свой вклад в чей-то код в google, они ожидают, что вы будете следовать этому стилю, где он облегчает сотрудничество.
нет никакой разницы между if (указатель) и if (указатель!= НЕДЕЙСТВИТЕЛЬНЫЙ.) если(указатель) используется для оптимизации кода.