我偶然发现了这段代码。
std::ostringstream str;
/// (some usage)
assert( ! str );
在 ostringstream
上下文中使用时, bool
表示什么?
这可能是编译和运行时出现的错误用法吗?
答案 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变坏,但你当然可以自己写一个。