Вопрос

Я наткнулся на этот код.

    std::ostringstream str;
    /// (some usage)
    assert( ! str );

Что означает ostringstream при использовании в контексте bool ?

Возможно, это неправильное использование, которое происходит при компиляции и запуске?

Это было полезно?

Решение

Он сообщает вам, является ли поток действительным Это то, что могут делать все потоки. Например, файловый поток может быть недействительным, если файл не был открыт должным образом.

Примечание: эта функциональность (тестирование потока как bool) достигается путем перегрузки явного оператора bool в C ++ 11 и более поздних версиях и путем перегрузки Оператор приведения void * в версиях до C ++ 11 .

Вот ссылка, содержащая несколько примеров того, почему поток может потерпеть неудачу . Это не относится к строковым потокам, но относится к ним.

Изменить: изменил bool на void * после того, как Мартин Йорк указал на мою ошибку.

Другие советы

Выражение является допустимым и оценивает состояние потока. Эта функция чаще используется в потоках ввода:

istringstream is;
is.str( "foo" );
int x;
is >> x;

if ( ! is ) {
   cerr << "Conversion failed";
}

Я не уверен, как любая из стандартных функций потоковой передачи может привести к ухудшению потока ostringstream, но вы, безусловно, могли бы написать его самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top