2016-05-29 9 views
-6

Учитывая данную часть кода. Что делает следующий оператор if?Объяснение параметра if в C++

int* pItem; 

if(pItem) 

{ 
     pItem->getvalue(); 

    } 
+2

Код в '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' объект некоторого типа. – templatetypedef

ответ

0

В данном конкретном случае, если оператор

if (pItem) { ... } 

эквивалентно

if (pItem != nullptr) { ... } 

Другими словами, он проверяет, является ли нулевой указатель.

Вообще говоря, если вы видите небулево выражение в операторе if, C++ будет неявно преобразовывать его в bool. Для указателей это проверяет, является ли указатель нулевым. Для целых типов это проверяет, является ли целое число 0. Для типов объектов это пытается использовать оператор неявного преобразования.

0

Что делает следующая инструкция if?

Он вызывает неопределенное поведение, так как pItem не инициализирован.

if(pItem) 

оператор пытается избежать разыменования pItem

pItem->getvalue(); 

когда pItem равна 0 или nullptr.

Но, как уже упоминалось, это не инициализировано, поэтому это неопределенное поведение.

0

Концепция заключается в том, что предложение if предотвращает использование кода nullptr.

Но переменная int не имеет методов, поэтому int-> pItem является недействительным по-другому.

Я бы ожидал в «int * pItem», что pItem является указателем на тип определения пользователя (например, класс). Но int - это зарезервированное слово и, следовательно, POD, без методов.

0

В C++ выражение вычисляется как false, если оно равно нулю, в противном случае оно равно true.

if (<expression>) 

в этом случае pItem это выражение, поэтому мы тестируем, является ли она равна нулю (нуль) или нет. Это эквивалентно

if (pItem != nullptr) 

Вы можете думать об этом, как говорят «если pItem имеет значение (отличное от нуля)»

0

Если это весь код, у вас есть, то ваша программа подлежит непредсказуемое поведение , Вы используете неинициализированную переменную.

Если указатель инициализирован правильно, тогда он вычисляет true/false в инструкции if в зависимости от того, на что указывает. Если это значение равно nullptr или NULL, тогда он вычисляет значение false. В противном случае он оценивает значение true.

Смежные вопросы