我偶然发现了这段代码。

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

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

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

有帮助吗?

解决方案

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

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

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

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

编辑 bool 更改为 void *

其他提示

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top