Dan*_*Dan 21 c++ iostream formatted-input
我写了很多operator<<(std::ostream &, const T &)函数 - 它们非常有用.
我从来没有operator>>(std::istream &, T &)在实际代码中编写函数,甚至没有使用内置类型的提取运算符(好吧,也许是std::string).这些仅适用于简短的示例程序和教科书吗?是operator>>C++的失败功能吗?
有人提出有关安全地重载流操作符的问题.我想知道是否有人在实践中这样做.
即使对于像C++文件中读取输入这样的简单内容我也无法建议使用operator>>.编写在检测和处理输入错误(或者我不知道如何)中的健壮代码是非常困难的.
如果您不同意,请展示一个使用的好例子operator>>- 也许通过回答我链接到的最后一个问题.
op>>所以我接受了那个.
是的我使用operator >>(尽管不像operator <<那样频繁).将用户定义的类型解析为各自的对象非常有用,因此集中了解析和必要的错误处理.它对于解析枚举类型的字符串表示也非常有用.
例如,考虑表示水果的枚举类型.您可以使用operator >>来解析字符串(如"apple","banana"等)以获取正确的枚举值.
std::istream &operator>>(std::istream &is, Fruit &fruit)
{
std::string str;
is >> str;
if (str == "apple")
fruit = APPLE;
else if (str == "banana")
fruit = BANANA;
// other fruits
else
is.setstate(std::ios::failbit);
return is;
}
Run Code Online (Sandbox Code Playgroud)
还要注意在istream上使用setstate方法来设置遇到未知字符串时流的失败状态.使用此运算符时,可以按如下方式检查流的failstate:
Fruit fruit;
std::cin >> fruit;
if (std::cin.fail())
std::cout << "Error: Unknown Fruit!" << std::endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7292 次 |
| 最近记录: |