如标题所述,我就是不明白为什么这个函数会抛出std::bad_alloc
异常。如果我们看一下cppreference中所有三种可能的实现方式,它们都像人们想象的那样,并且似乎没有特殊需要动态内存分配。
如标题所述,我就是不明白为什么这个函数会抛出std::bad_alloc
异常。如果我们看一下cppreference中所有三种可能的实现方式,它们都像人们想象的那样,并且似乎没有特殊需要动态内存分配。
因此,实现可以为任何重载提供可能抛出异常的std::find函数。默认情况下,没有noexcept规范的标准库函数可以抛出实现定义的异常(见 eel.is/c++draft/res.on.exception.handling#4),find_if也没有任何约束“Throws:”子句(eel.is/c++draft/alg.find)。
这是由于模板中的执行策略导致的。
"C++标准允许并行算法分配内存,并在无法获取内存时抛出std::bad_alloc异常"
https://devblogs.microsoft.com/cppblog/using-c17-parallel-algorithms-for-better-performance/
如果算法无法分配内存,则会抛出std::bad_alloc异常
。 - Caseynoexcept
说明的标准库函数允许抛出实现定义的异常(请参见 https://eel.is/c++draft/res.on.exception.handling#4),而find_if
没有任何 "Throws:" 条款限制它 (https://eel.is/c++draft/alg.find)。 - user17732522std::bad_alloc
很重要呢?大多数标准库函数都有可能抛出异常,尤其是std::bad_alloc
。如果您希望优雅地处理std::bad_alloc
异常,那么您需要假设任何非noexcept
的代码都有可能会抛出异常,因此需要编写几乎所有的代码。 - user17732522