Konwersja string na double z rozpoznaniem błędu

0

Cześć, zadziwiła mnie jedna rzecz. Mam taki oto kod:

 
try
{
	double value = std::stod(L"1.00a");
	return true;
}catch(...)
{
	return false;
}

Wg mnie nie powinno to się skonwertować, tylko powinien wyskoczyć błąd. Jednak wartość value po tej konwersji ma 1.00. Dlaczego tak się nie dzieje? I jak napisać funkcję w stylu TryConvertToDouble?

2

Wystarczy poczytać dokumentację. http://en.cppreference.com/w/cpp/string/basic_string/stof użyj drugiego argumentu lub pobaw się streamami.

boost::optional<double> TryConvertToDoubleSTOD(string const& str) try {
	size_t index;
	double result = stod(str, &index);
	if(index == str.size()){
		return result;
	} else {
		return boost::none;
	}
} catch(std::exception const&) {
	return boost::none;
}
boost::optional<double> TryConvertToDouble(string const& str) {
	std::istringstream s{str};
	double result;
	string leftover;
	if(s >> result && !(s >> leftover)){
		return result;
	}else{
		return boost::none;
	}
}

http://melpon.org/wandbox/permlink/5k9CXVlHwxJrnnS6

1 użytkowników online, w tym zalogowanych: 0, gości: 1