Если без условия?

Я нашел этот "С++" сегодня, и я не могу его понять:

if(array[i][j]) {--i;--j;}

Может ли кто-нибудь объяснить мне, как эта работа? Я просто не понимаю. Какое здесь условие? Кажется, это было бы правдой каждый раз, но когда я избавился от IF (так осталось только это {--i;--j;}.), Это не сработает.

Я новичок в С++, так что легко объясним!:)

Спасибо!

Ответ 1

Предполагая, что массив представляет собой массив из int (или других интегральных типов), условие будет ложным тогда и только тогда, когда array[i][j] == 0

Ответ 2

В С++ ненулевое значение может использоваться для обозначения "успеха" в условном выражении.

Это от C99, раздел 6.8.4.1:

Заявление if

2 В обеих формах первое подмножество выполняется, если выражение сравнивается с не равным 0.

Из С++ 03, раздел 6.4

4 Значение условия, которое является инициализированным объявлением в операторе, отличном от оператора switch, представляет собой значение объявленной переменной, неявно преобразованное в тип bool. Если это преобразование плохо сформировано, программа плохо сформирована. Значение условия, которое является инициализированным объявлением в выражении switch, является значением объявленной переменной, если оно имеет целочисленный или перечисляемый тип, или же эту переменную, неявно преобразованную в интегральный или нулевой тип в противном случае. Значение условия, которое является выражением, является значением выражения, неявно преобразованного в bool для операторов, отличных от switch; если это преобразование плохо сформировано, программа плохо сформирована. Значение условия будет называться просто "условием", где использование недвусмысленно.

И логическое преобразование определено в 6.3.1.2

6.3.1.2 Булев тип

1 Когда любое скалярное значение преобразуется в _Bool, результат равен 0, если значение сравнивается с 0; в противном случае результат равен 1.

И int является скалярным типом. Я предполагаю, что ваш массив заполнен, поскольку вы можете использовать унарные ++ и -- на них.

Ответ 3

if получает true, если array[i][j] получает true при нажатии на bool. Если array имеет, например, float или int, все, что не равно 0, будут добавлены к true. Ситуация может отличаться для пользовательских типов.

Ответ 4

Оператор if требует логического значения в своих круглых скобках. Таким образом, он попытается явно передать все, что ваше выражение в логическое. Например, для целых чисел и указателей ненулевое значение будет истинным, а нулевое значение будет ложным.

Итак, если ваше выражение (array [i] [j]) может быть передано в true, тогда условие будет истинным.

Ответ 5

"условие" является выражением bool. В С++ int может быть неявно отбрасываться на bool. (где 0 = false, а все остальное - true).

Ответ 6

Было бы лучше, если бы вы поняли, переписываю ли ваш код следующим образом:

if((array[i][j])==true)
{
    --i;
    --j;
}

Итак, это означает, что условие if действительно проверяет, является ли значение строки и столбца массива логическим значением true. Затем он войдет в ваш if-блок и уменьшит значения я и j, что означает, что он переключится на предыдущую строку и предыдущий столбец вашего массива.

Конечно, вам нужно указать тип данных вашего значения массива в boolean до его реализации.