Подтвердить что ты не робот

Как это выражение выполняется в С++?

Является ли if ( c ) тем же, что и if ( c == 0 ) в С++?

4b9b3361

Ответ 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 на действительный объект. Обычно компиляторы производят одинаковый код.