Что у вас есть для цикла while:
while ( expression );
Если выражение равно true
или non 0
, цикл будет продолжен;в противном случае, если оно оценивается как false
или 0
, оно прекращается.Итак, оглядываясь назад на ваш оригинал:
int n = 7;
while ( n /= 10 );
Это становится:
while ( n = 7 / 10 );
Здесь полное выражение n = 7 / 10
;Это должно привести к 0
из-за усечения целочисленной арифметики.Значение путем неявного преобразования из int
в bool
становится false
.Поскольку полученный результат равен 0
.
Здесь нет ничего, что мешало бы его компиляции.Поскольку это ничем не отличается от наличия:
while ( false );
Однако с присваиванием и арифметическими операциями;это не всегда так, но в вашем случае это так.Рассмотрим следующий пример: он все равно будет скомпилирован, но цикл не прекратится:
int n = 5;
while( n + n );
Затем он станет:
while( 5 + 5 );
...
while( 10 );
...
while( true );
, который все равно будет компилироваться, но цикл будет продолжаться бесконечно.