gpt4 book ai didi

c++ - 为什么 std::stof 在传递它无法转换的参数时不抛出?

转载 作者:太空狗 更新时间:2023-10-29 20:05:47 28 4
gpt4 key购买 nike

我正在做一个项目,我想接受 {float}{single-letter-identifier} 形式的输入,例如 15.6E,或 10W

为此,我认为我可以获取输入字符串,去掉最后一个字母,然后检查是否可以使用 std::stof 执行转换为 float 。这将嵌套在 try-catch block 中,并允许我通知用户输入无效。

STL 的开放标准 here (第 653 页)声明 std::stof 抛出:

invalid_argument if wcstod or wcstold reports that no conversion could be performed.

但是,当传递一些它无法转换的东西时它不会抛出,例如“48East”。重现此行为的代码示例如下:

std::wstring szString = L"48East";
try{
float f = std::stof(szString);
} catch( ... )
{
std::cout << "test" << std::endl;
}

这是在 Debug模式下使用 /Od 在 MSVC10 上编译的,所以我假设调用没有被优化掉。

我将不胜感激任何帮助(或关于我误解/误读规范的地方的指导!)。

最佳答案

在我阅读它时,stof 会尽可能多地转换输入字符串,直到它找到无法转换的内容。如果它不能转换任何东西,它会抛出 invalid_argument

关于c++ - 为什么 std::stof 在传递它无法转换的参数时不抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443074/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com