Не используйте хороший ()!Проверьте, является ли поток неудачным или нет :
if (ss)
Good сообщает вам, установлены ли какие-либо из eofbit, badbit или failbit, а fail () сообщает вам о badbit и failbit.Вы почти никогда не заботитесь о eofbit, если вы уже не знаете, что поток не работает, поэтому вы почти никогда не хотите использовать good.
Обратите внимание, что тестирование потока напрямую, как указано выше, в точности эквивалентно:
if (!ss.fail())
И наоборот,! Ss эквивалентно ss.fail ().
Объединение извлечения в условное выражение:
if (ss >> d) {/*...*/}
Isв точности эквивалентно:
ss >> d;
if (ss) {/*...*/}
Однако вы, вероятно, захотите проверить, может ли полная строка быть преобразована в double, что немного сложнее.Используйте boost :: lexical_cast, который уже обрабатывает все случаи.