C ++ - Разница между "! Pointer" и "pointer == nullptr"? - PullRequest
1 голос
/ 23 февраля 2020

Итак, я наткнулся на этот небольшой фрагмент кода из функции

void remove(Node * & p, const int & key){
  if(!p){
    throw out_of_range("The key you're looking for can't be found\n");
  }
  if(p == nullptr){
    return;
  }

, и я не совсем понимаю разницу между !p и p == nullptr. Из того, что я читал о C ++, всегда казалось, что эти два утверждения эквивалентны. Они нет? Я не прав?

Нужно немного разъяснений.

Спасибо!

Ответы [ 3 ]

1 голос
/ 23 февраля 2020

На самом деле оба одинаковы. Вы можете проверить, является ли указатель нулевым или нет, используя оба.

nullptr был представлен в C ++ 11, который может использоваться как if (p == nullptr ) , который предпочтительнее , если (! P)

Надеюсь, это поможет:)

1 голос
/ 23 февраля 2020

First of ALL

  • Оба на 100% одинаковы, то же самое значение То же работает
  • Разработчик только что использовал 2 If Statements (первое, чтобы показать сообщение, что оно не найдено ) и 2-го, чтобы вернуться назад, хотя он может сделать оба в 1 Если и так, может быть, он просто хотел показать, что он знает оба подхода, поэтому он сделал это таким образом, иначе нет разницы в обоих и что, возможно, потребовалось еще один большой O раз. -Для более ясного просмотра вы можете посетить эту ссылку ( разница между p == NULL и! P в c ++ )

ПОДРОБНЫЙ ОТВЕТ НИЖЕ:

! p и p == nullptr оба имеют одинаковую рабочую силу. Код в вашем случае показывает, что если (! p) и if (p == nullptr) оба используются только для того, чтобы показать, что разработчик знает оба подхода и он старший Разработчик знаком с более старыми версиями C ++. Потому что, если он использует

if(!p){throw out_of_range("The key you're looking for can't be found\n");
return;
}
or Uses
if(p==nullptr)
{throw out_of_range("The key you're looking for can't be found\n");
return;}

Но в Вашем случае разработчик Only Thing показал ему сообщение, что Node не найден в первом IF, и вернул функцию во втором If.No что бы он ни думал или не намеревался делать, но оба они одинаковы, и он просто использует другой ЕСЛИ, который вообще не нужен

Если вам по-прежнему требуется дополнительная помощь о подробных различиях между обоими, вы можете проверить в разница между p == NULL и! p в c ++

1 голос
/ 23 февраля 2020

Первое «если» фактически сравнивается, если p == 0 (другими словами! P). Это своего рода NULL C, соединенный с C ++, может вызвать неоднозначность в перегруженной функции. Например: check (int) и check (int *).

Второй if проверяет p на тип указателя (nullptr)

...