正如我在标题中所说,我只是不明白为什么这个函数会抛出异常std::bad_alloc。如果我们看一下cppreference,所有三种可能的实现都正如某人所假设的那样,并且看起来没有特殊需要动态内存分配。
Avi*_*ger 21
cppreference中显示的 3 种可能的实现适用于不采用执行策略的 3 种重载。特别是那些采用执行策略的重载被明确列为可能抛出 std::bad_alloc。
执行策略涉及并行化或矢量化操作的可能性。这将需要额外的内存来实现,而不仅仅是依赖于非并行化/矢量化版本中的标量变量。
编辑:也就是说,正如@user17732522 在评论中所说:
默认情况下,没有 noexcept 规范的标准库函数允许抛出实现定义的异常(请参阅 eel.is/c++draft/res.on.exception.handling#4),并且 find_if 没有任何“抛出: " 子句限制 ( eel.is/c++draft/alg.find )。
因此,允许一个实现提供一个 std::find ,它确实会抛出任何重载。
Sar*_*ATM 13
这是因为模板中的执行策略。
\n“C++ 标准允许并行算法分配内存,并在无法\xe2\x80\x99t 获取内存时抛出 std::bad_alloc”
\nhttps://devblogs.microsoft.com/cppblog/using-c17-parallel-algorithms-for-better-performance/
\n