Является ли if ( c )
тем же, что и if ( c == 0 )
в С++?
Как это выражение выполняется в С++?
Ответ 1
Нет, if (c)
совпадает с if (c != 0)
.
И if (!c)
совпадает с if (c == 0)
.
Ответ 2
Я разорвусь из пакета на этом... "if (c)
" ближе всего к "if (((bool)c) == true)
". Для целых типов это означает "if (c != 0)
". Как отмечали другие, перегрузка operator !=
может вызвать некоторую странность, но поэтому может перегружать "operator bool()
", если я не ошибаюсь.
Ответ 3
Если c является указателем или числовым значением,
if( c )
эквивалентно
if( c != 0 )
Если c является логическим (тип bool [только С++]), (изменить: или пользовательский тип с перегрузкой оператора bool())
if( c )
эквивалентно
if( c == true )
Если c не является указателем или числовым значением, ни булево,
if( c )
не будет компилироваться.
Ответ 4
Это больше похоже на if ( c != 0 )
Конечно, оператор !=
может быть перегружен, поэтому не совсем точно сказать, что они ровно равны.
Ответ 5
Это относится только к числовым значениям. если c является классом, должен быть перегружен оператор, который делает преобразование логическим, например здесь:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
Ответ 6
Да, они одинаковы, если вы меняете == 0
на != 0
.
Ответ 7
if(c)
{
//body
}
Возможные значения c: отрицательный, ноль, положительный
Условный оператор обрабатывает * ноль * как false
В то время как для негатива и позитива это true
и блок будет выполняться только в том случае, если условие true
.
Ответ 8
Если c
является указателем, тогда тест
if ( c )
не совсем то же самое, что
if ( c != 0 )
Последняя является простой проверкой c
на указателе 0
(null), тогда как первая на самом деле является инструкцией для проверки того, указывает ли c
на действительный объект. Обычно компиляторы производят одинаковый код.