【发布时间】:2015-05-31 23:12:06
【问题描述】:
这是一个示例,摘自 B. Stroustrup 所著的《C++ 编程语言》第二版中的10.3.3 用户定义类型的输入部分。代码很旧,但仍然可以通过细微的更改进行编译。示例:
#include <istream> #include <complex> using namespace std; istream& operator>>(istream& s, complex<double>& a) { // input formats for a complex; "f" indicates a float: // // f // (f) // (f, f) double re = 0, im = 0; char c = 0; s >> c; if( c == '(' ) { s >> re >> c; if( c == ',' ) s >> im >> c; if( c != ')' ) s.clear(ios::badbit); // set state } else { s.putback(c); s >> re; } if( s ) a = complex<double>(re, im); return s; }尽管错误处理代码很少,但这实际上可以处理 大多数类型的错误。 局部变量
c被初始化以避免 在操作失败后意外地获得了'('的值。 流状态的最终检查确保参数的值 如果一切顺利,a将被更改。
我没听懂上面强调的那句话。
【问题讨论】: