Первый вопрос. Чтобы сообщить следующей функции, использующей текущий поток, о том, что что-то пошло не так, функция устанавливает новое значение для флагов состояния внутренней ошибки потока.
is.clear(ios_base::failbit);
Таким образом, вы можете проверить после использования оператора >>, что все прошло хорошо, используя функцию
.fail()
от istream
для получения дополнительной информации проверьте fail и clear .
Второй вопрос. Ваш код не вызывает конструктор по умолчанию, он просто не изменяет dd
, поэтому, если вы закодировали что-то вроде
std::ifstream f('date.in')
date d;
f >> d;
if(!f.fail())
{ std::cout << d << std::endl;}
else
{ std::cout << "parsing failed" << std::endl;}
если f.fail () имеет значение true, то d не изменяется и был создан с использованием конструктора по умолчанию.