Точный механизм, который позволяет использовать istream в качестве логического выражения, был изменен в C ++ 11.Ранее это было неявное преобразование в void*
, как вы обнаружили.В C ++ 11 это вместо explicit
преобразование в bool
.
. Использование istream или ostream в логическом выражении было разрешено, чтобы программисты на C ++ могли продолжать использовать выражение спобочные эффекты как условие цикла while
или for
:
SomeType v;
while( stream >> v )
{
// ...
}
И причина, по которой программисты это делают и хотят, заключается в том, что они дают более лаконичный код, код, которыйлегче понять с первого взгляда, чем, например,…
for( ;; )
{
SomeType v;
stream >> v;
if( stream.fail() )
{
break;
}
// ...
}
Однако в некоторых случаях даже такая многословная структура может быть предпочтительнее.Это зависит.
Приветствия & hth.,