有没有办法捕捉没有给出正确参数的 STL 函数的异常?

Posted

技术标签:

【中文标题】有没有办法捕捉没有给出正确参数的 STL 函数的异常?【英文标题】:Is there a way to catch the exception of an STL function not being given right arguments? 【发布时间】:2020-06-27 11:05:44 【问题描述】:

我正在使用 std::stol() 将字符串转换为长类型。但是,如果用户输入字母,我如何确保捕获到异常?

代码可以在here找到。

注意:我已经找到了解决这个问题的正确方法,我只需要知道该怎么做而不是:

if ( !(stol(input)) ) // Yes, I know it's stupid to think the output would be bool
    throw 'R'; 

【问题讨论】:

【参考方案1】:

std::stol() 在输入错误时抛出异常。使用try..catch 捕捉它们。

【讨论】:

【参考方案2】:

从评论到另一个答案,这里的目标似乎有些模棱两可。要回答标题中的问题,要捕获异常,请编写 try ... catch 块:

long get_value() 
    for (;;) 
        std::cout << "Enter a number: ";
        std::string text;
        std::cin >> text;
        try 
            return stol(text);
         catch(...) 
            std::cout << "Invalid input\n";
        
   

但是评论建议扫描整个输入文本以查看任何地方是否有字母的解决方案是合适的。如果目标是要求输入仅包含数字,则无需在调用std::stol 之前扫描每个字符。它比你想象的要聪明。

int last;
std::stol(text, &last);
if (last != text.length())
    // got a bad character

这会检测像"123q" 这样的输入。

一如既往,阅读文档

【讨论】:

以上是关于有没有办法捕捉没有给出正确参数的 STL 函数的异常?的主要内容,如果未能解决你的问题,请参考以下文章

函数中返回参数的数据位置必须是“内存”,但没有给出

bzoj3687简单题 背包dp+STL-bitset

正确释放Vector等STL的内存

参数在 ActionResult 中没有给出正确的值

为啥 filter + abs 函数没有给出正确的值

arcgis开启捕捉工具还是没有办法使用,是怎么回事啊