std :: ostringstream如何转换为bool?
-
08-07-2019 - |
题
我偶然发现了这段代码。
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变坏,但你当然可以自己写一个。
不隶属于 StackOverflow