我正在做一个项目,我想接受表单的输入{float}{single-letter-identifier}
,例如15.6E
,或10W
。
为此,我认为我可以获取输入字符串,去掉最后一个字母,然后检查是否可以使用std::stof
. 这将嵌套在一个try-catch
块中,并允许我通知用户输入无效。
这里的 STL 的开放标准(第 653 页)指出std::stof
:
invalid_argument
如果 wcstod 或 wcstold 报告无法执行转换。
但是,它在传递无法转换的东西时不会抛出,例如"48East"
. 重现此行为的代码示例如下:
std::wstring szString = L"48East";
try{
float f = std::stof(szString);
} catch( ... )
{
std::cout << "test" << std::endl;
}
这是在 MSVC10 上以调试模式编译的/Od
,所以我假设调用没有被优化掉。
我很感激任何帮助(或关于我在哪里误解/误读了规范的指导!)。