std :: ostringstream如何转换为bool?

时间:2009-05-07 16:08:12

标签: c++ casting stream boolean ostringstream

我偶然发现了这段代码。

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

ostringstream 上下文中使用时, bool 表示什么?

这可能是编译和运行时出现的错误用法吗?

3 个答案:

答案 0 :(得分:10)

它会告诉您流是否当前有效。这是所有流可以做的事情。例如,如果文件未正确打开,则文件流可能无效。

作为旁注,此功能(将流测试为bool)是通过在C ++ 11及更高版本中重载explicit operator bool 并重载void*来实现的。在C ++ 11 之前的版本中转换运算符。

以下是包含some examples of why a stream might fail的链接。这不是特定于字符串流的,但它确实适用于它们。

在Martin York指出我的错误之后,

修改bool更改为void*

答案 1 :(得分:4)

答案 2 :(得分:1)

表达式有效并评估流的状态。此功能更常用于输入流:

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

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

我不确定任何标准流功能如何导致ostringstream变坏,但你当然可以自己写一个。