Как std :: ostringstream преобразовать в bool? - PullRequest
3 голосов
/ 07 мая 2009

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 07 мая 2009

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

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

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

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

4 голосов
/ 07 мая 2009
1 голос
/ 07 мая 2009

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

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

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

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

...