std::accumulate
的C++参考文档没有提到std::accumulate
可能抛出任何异常,但其定义中并不包含noexcept
。假设使用的类型和操作都不会抛出异常,那么在声明为noexcept
的成员函数中使用std::accumulate
是安全的吗?还是会导致未定义行为(UB)?例如:
#include <iostream>
#include <numeric>
#include <vector>
class A {
std::vector<int> m_v;
public:
A(std::size_t N) : m_v(N, 1) { }
int sum() const noexcept { return std::accumulate(m_v.begin(), m_v.end(), 0); }
};
int main()
{
A x{3};
std::cout << x.sum() << std::endl;
return 0;
}
将
A::sum()
声明为 noexcept
是否会导致未定义的行为?
noexcept
的函数抛出异常,那么它的行为是明确定义的。 - Eljay