std :: ostringstream如何转换为bool?

Dre*_*ann 3 c++ casting boolean stream ostringstream

我偶然发现了这段代码.

    std::ostringstream str;
    /// (some usage)
    assert( ! str );
Run Code Online (Sandbox Code Playgroud)

ostringstreambool上下文中使用时表示什么?

这可能是编译和运行时不正确的用法吗?

Naa*_*aff 10

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

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

这是一个链接,其中包含流可能失败的原因的一些示例.这不是特定于字符串流,但它确实适用于它们.

编辑:boolvoid*后马丁纽约指出我的错误.

  • 实际上,这是通过重载void*cast操作符来实现的.如果使用了bool强制转换运算符,则可以在算术上下文中使用该流,并且编译器将转换为bool并使用值0/1.另一方面,void*不能在算术上下文中使用,但可以在bool上下文中使用,因为NULL指针计算为false.但在这种情况下运营商!用于显式返回bool值. (4认同)