4

我偶然发现了这段代码。

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

在上下文ostringstream中使用时意味着什么?bool

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

4

3 回答 3

11

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

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

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

编辑:boolvoid*Martin York 指出我的错误之后改为。

于 2009-05-07T16:12:19.100 回答
4

供参考:ostringstream::operator void*()ostringstream::operator!()

于 2009-05-07T17:12:29.080 回答
1

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

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

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

我不确定任何标准流函数如何导致 ostringstream 变坏,但您当然可以自己编写一个。

于 2009-05-07T16:13:28.473 回答