Code: Select all
namespace auxiliary {
static bool str_to_double(const std::string &line, double &res) noexcept {
char *end = nullptr;
errno = 0;
double value = strtod(line.c_str(), &end);
if (line.empty()) {
std::fputs("line is empty!\n", stderr);
} else if (end == line.c_str()) {
std::fputs("No characters consumed. Couldn't parse event the first character!\n", stderr);
} else if (*end != '\0') {
std::fputs("trailing nonnumerical character(s) detected\n", stderr);
} else if (errno == ERANGE) {
std::fputs("Overflow or underflow for double\n", stderr);
} else {
// everything's alright
res = value;
return true;
}
return false;
}
} namespace aux = auxiliary;
In einer anderen Eingabeaufforderung teilte mir ChatGPT mit, dass das oben genannte AUCH Probleme verursachen kann.
Ich nehme an, in einer realen Anwendung würde ich wahrscheinlich so etwas wie eine benutzerdefinierte Logger-Klasse oder -Methode verwenden.
Aber in diesem speziellen Fall Welche soll verwendet werden, um sicherzustellen, dass keine Ausnahmen ausgelöst werden? cout/fputs/fprint? Oder sollte ich diese Idee aufgeben und die Funktion überhaupt als „noexclusive“ markieren?
Mobile version