std::stod
是 C++ 标准库中的一个函数,用于将字符串转换为 double
类型的浮点数
std::stod
会抛出 std::invalid_argument
异常。你可以使用 std::istringstream
和 std::stod
的异常处理机制来捕获这个异常。#include <iostream> #include <sstream> #include <string> #include <stdexcept> int main() { std::string input = "abc"; // 无效的浮点数表示 std::istringstream iss(input); try { double value = std::stod(iss); std::cout << "转换成功: " << value << std::endl; } catch (const std::invalid_argument& e) { std::cerr << "捕获到无效参数异常: " << e.what() << std::endl; } catch (const std::out_of_range& e) { std::cerr << "捕获到超出范围异常: " << e.what() << std::endl; } return 0; }
在这个示例中,我们尝试将一个无效的浮点数字符串 “abc” 转换为 double
类型。由于输入字符串无效,std::stod
会抛出 std::invalid_argument
异常,我们通过捕获这个异常来处理错误。
std::stod
还可能抛出 std::out_of_range
异常,表示转换后的浮点数超出了 double
类型的表示范围。你可以使用类似的方法捕获这个异常。#include <iostream> #include <sstream> #include <string> #include <stdexcept> int main() { std::string input = "1e309"; // 超出 double 范围的值 std::istringstream iss(input); try { double value = std::stod(iss); std::cout << "转换成功: " << value << std::endl; } catch (const std::invalid_argument& e) { std::cerr << "捕获到无效参数异常: " << e.what() << std::endl; } catch (const std::out_of_range& e) { std::cerr << "捕获到超出范围异常: " << e.what() << std::endl; } return 0; }
在这个示例中,我们尝试将一个超出 double
范围的大数 “1e309” 转换为 double
类型。由于输入值超出了范围,std::stod
会抛出 std::out_of_range
异常,我们通过捕获这个异常来处理错误。