Учитывая данную часть кода. Что делает следующий оператор if?Объяснение параметра if в C++
int* pItem;
if(pItem)
{
pItem->getvalue();
}
Учитывая данную часть кода. Что делает следующий оператор if?Объяснение параметра if в C++
int* pItem;
if(pItem)
{
pItem->getvalue();
}
В данном конкретном случае, если оператор
if (pItem) { ... }
эквивалентно
if (pItem != nullptr) { ... }
Другими словами, он проверяет, является ли нулевой указатель.
Вообще говоря, если вы видите небулево выражение в операторе if
, C++ будет неявно преобразовывать его в bool
. Для указателей это проверяет, является ли указатель нулевым. Для целых типов это проверяет, является ли целое число 0. Для типов объектов это пытается использовать оператор неявного преобразования.
Что делает следующая инструкция if?
Он вызывает неопределенное поведение, так как pItem
не инициализирован.
if(pItem)
оператор пытается избежать разыменования pItem
pItem->getvalue();
когда pItem
равна 0
или nullptr
.
Но, как уже упоминалось, это не инициализировано, поэтому это неопределенное поведение.
Концепция заключается в том, что предложение if предотвращает использование кода nullptr.
Но переменная int не имеет методов, поэтому int-> pItem является недействительным по-другому.
Я бы ожидал в «int * pItem», что pItem является указателем на тип определения пользователя (например, класс). Но int - это зарезервированное слово и, следовательно, POD, без методов.
В C++ выражение вычисляется как false
, если оно равно нулю, в противном случае оно равно true
.
if (<expression>)
в этом случае pItem
это выражение, поэтому мы тестируем, является ли она равна нулю (нуль) или нет. Это эквивалентно
if (pItem != nullptr)
Вы можете думать об этом, как говорят «если pItem имеет значение (отличное от нуля)»
Если это весь код, у вас есть, то ваша программа подлежит непредсказуемое поведение , Вы используете неинициализированную переменную.
Если указатель инициализирован правильно, тогда он вычисляет true/false в инструкции if в зависимости от того, на что указывает. Если это значение равно nullptr или NULL, тогда он вычисляет значение false. В противном случае он оценивает значение true.
Код в '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' объект некоторого типа. – templatetypedef