Короткий ответ: оба верны, если этой версии книги более нескольких лет.
До C ++ 11 поведение по умолчанию operator>>
при извлечении целого числа было оставьте его без изменений , если извлечение завершится неудачей.
В C ++ 11 это поведение было изменено, чтобы хранить 0 в целое число при сбое извлечения.
Я неЯ знаю, почему было сделано изменение, но я предполагаю, что оно предотвращает общий класс неопределенного поведения, когда люди оставляют переменную неинициализированной, а затем не проверяют успешность извлечения перед использованием переменной.
К сожалению, механизмформатированный ввод довольно длинный, но сжатая версия такова, что вызов в конечном итоге сводится к num_get::get()
, где указано это поведение. 1
1: Для вашего интереса, также можно прикрепить другой фасет для форматированного ввода, чтобы использовать вместо него, то есть вы можете указать любое поведениеты хочешь за неудачу.