【发布时间】:2009-05-07 16:08:11
【问题描述】:
我偶然发现了这段代码。
std::ostringstream str;
/// (some usage)
assert( ! str );
ostringstream 在 bool 上下文中使用时表示什么?
这可能是编译和运行时发生的错误用法吗?
【问题讨论】:
标签: c++ casting stream boolean ostringstream
我偶然发现了这段代码。
std::ostringstream str;
/// (some usage)
assert( ! str );
ostringstream 在 bool 上下文中使用时表示什么?
这可能是编译和运行时发生的错误用法吗?
【问题讨论】:
标签: c++ casting stream boolean ostringstream
它告诉您流当前是否有效。这是所有流都可以做的事情。例如,如果文件未正确打开,文件流可能无效。
附带说明,此功能(将流测试为布尔值)是通过在 C++11 及更高版本中重载 explicit operator bool以及在版本中重载 void* 转换运算符来实现的在 C++11 之前。
这是一个包含some examples of why a stream might fail 的链接。这并不特定于字符串流,但确实适用于它们。
编辑:在 Martin York 指出我的错误后将 bool 更改为 void*。
【讨论】:
表达式有效并评估流的状态。此功能更常用于输入流:
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
我不确定任何标准流函数如何导致 ostringstream 变坏,但您当然可以自己编写一个。
【讨论】: