double入力を検証する実行可能な例を次に示します。
#include<iostream>
#include<sstream>
#include<limits>
using std::numeric_limits;
int main(){
std::string goodString = "12.212", badString = "!@$&*@";
std::istringstream good(goodString), bad(badString);
double d1=numeric_limits<double>::min(),
d2=numeric_limits<double>::min();
std::string tmp;
good >> d1;
if (d1 == numeric_limits<double>::min()) {
// extraction failed
d1 = 0;
good.clear(); // clear error flags to allow further extraction
good >> tmp; // consume the troublesome token
std::cout << "Bad on d1\n";
} else std::cout << "All good on d1\n";
if (d2 == numeric_limits<double>::min()) {
d2 = 0;
bad.clear();
bad >> tmp;
std::cout << "Bad on d2\n";
} else std::cout << "All good on d2\n";
}
生成される出力は..
d1 ですべて良好
d2 が悪い