c++ - 设置流状态以在格式化输出运算符(运算符<<)中传达错误
问题描述
我相信当给定输入不可用时,在输入流上设置故障位是最佳实践。但是我想知道为什么我没有找到证据在 ostreams 上做同样的事情。
例如, cppreference具有以下用于重载运算符 << 和 >> 的示例。
std::ostream& operator<<(std::ostream& os, const T& obj)
{
// write obj to stream
return os;
}
std::istream& operator>>(std::istream& is, T& obj)
{
// read obj from stream
if( /* T could not be constructed */ )
is.setstate(std::ios::failbit);
return is;
}
问题:我想知道是否还应该在输出流上设置故障位(如果适用)。
请考虑以下示例:
enum class enumeration
{
ONE,
TWO
};
std::ostream& operator<<(std::ostream& os, const enumeration& e)
{
switch (e)
{
case enumeration::ONE:
os << "1";
break;
case enumeration::TWO:
os << "2";
break;
default:
os.setstate(std::ios::failbit); // <-- line in question
break;
}
return os;
}
有问题的线路是否合理?(我在这里放了一个工作示例cpp.sh。)
最后,我想知道我是否可以、应该或避免在 ostreams 上设置故障位以及为什么。
解决方案
您所描述的情况的标准做法是编写一些无效值的表示。通常不需要将其标记为错误。例如,如果出现数值 42,您可以写“? (42)”。或者也许只是“42”,如果您希望能够轻松地使用operator >>
.
推荐阅读
- c# - 为什么将 Avro 文件转换为 Msgpack 文件的 C# 代码会随着时间的推移变得更慢?
- javascript - html 上的转换比例转换仅在鼠标移动时设置动画
- javascript - 反应路由器交换机没有显示任何东西
- tensorflow - 使用地图复制张量流数据集中的图像
- c# - 在 SetValue 之后从 DependencyProperty 在 ViewModel 中获取 null
- nextflow - `errorStrategy` 设置停止当前进程但继续管道
- indexing - 如果另一个表上的值包含在同一行的单元格中,则 TEXTJOIN 的 INDEX MATCH 唯一值
- r - 尝试使用 ggplot 绘制具有一个分类变量的简单线性回归,并在绘图上获得回归线
- instagram - Instagram 的 API 中有没有办法从特定用户那里获取新帖子的 URL?我想将它与 Reddit 机器人集成
- r - 删除R中字符和空行之间的单词