Как std :: ostringstream преобразовать в bool?
-
08-07-2019 - |
Вопрос
Я наткнулся на этот код.
std::ostringstream str;
/// (some usage)
assert( ! str );
Что означает ostringstream
при использовании в контексте bool
?
Возможно, это неправильное использование, которое происходит при компиляции и запуске?
Решение
Он сообщает вам, является ли поток действительным Это то, что могут делать все потоки. Например, файловый поток может быть недействительным, если файл не был открыт должным образом.
Примечание: эта функциональность (тестирование потока как bool) достигается путем перегрузки явного оператора bool
в C ++ 11 и более поздних версиях и путем перегрузки Оператор приведения void *
в версиях до C ++ 11 .
Вот ссылка, содержащая несколько примеров того, почему поток может потерпеть неудачу . Это не относится к строковым потокам, но относится к ним.
Изменить: изменил bool
на void *
после того, как Мартин Йорк указал на мою ошибку.
Другие советы
Для справки: ostringstream :: operator void * () и ostringstream :: operator! () .
Выражение является допустимым и оценивает состояние потока. Эта функция чаще используется в потоках ввода:
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
Я не уверен, как любая из стандартных функций потоковой передачи может привести к ухудшению потока ostringstream, но вы, безусловно, могли бы написать его самостоятельно. Р>