为什么 std::allocator::deallocate 不是 noexcept?

Son*_*c78 5 c++ c++11 c++14 c++17

C++ 规范 (ISO/IEC 14882:2011 + ISO/IEC 14882:2014) 在表 28 \xe2\x80\x94 中定义了解除分配的分配器要求:

\n\n
\n

p 指向的区域中的所有 n T 个对象都应在此调用之前销毁。n 应与传递给分配的值匹配以获得此内存。不抛出异常。

\n
\n\n

但为什么deallocate仍然不是noexcept呢?

\n

T.C*_*.C. 5

allocate它是狭窄的契约(例如,如果您向它传递一个未返回的指针,则会导致未定义的行为),因此根据标准库的通常策略,它不会被标记为 noexcept。