我偶然发现了这段代码。
std::ostringstream str;
/// (some usage)
assert( ! str );
在上下文ostringstream
中使用时意味着什么?bool
这可能是编译和运行时发生的错误用法吗?
我偶然发现了这段代码。
std::ostringstream str;
/// (some usage)
assert( ! str );
在上下文ostringstream
中使用时意味着什么?bool
这可能是编译和运行时发生的错误用法吗?
它告诉您流当前是否有效。这是所有流都可以做的事情。例如,如果文件未正确打开,则文件流可能无效。
作为旁注,此功能(将流测试为布尔值)是通过explicit operator bool
在 C++11 及更高版本中重载以及在 C++11 之前的版本中重载void*
强制转换运算符来实现的。
这是一个链接,其中包含一些流可能失败的示例。这并不特定于字符串流,但它确实适用于它们。
编辑:bool
在void*
Martin York 指出我的错误之后改为。
该表达式有效并评估流的状态。此功能更常用于输入流:
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
我不确定任何标准流函数如何导致 ostringstream 变坏,但您当然可以自己编写一个。