为什么clear()函数是noexcept而析构函数不是?

LoS*_*LoS 1 c++ std noexcept c++11

我注意到,在分配器感知的容器接口中,标准要求clear()成员函数是noexcept,而析构函数不是。std::forward_list此外,在某些基于节点的容器(例如和 )的情况下会出现差异,std::set因为clear()成员函数执行与析构函数相同的操作。这种差异有什么原因吗?

Mes*_*kon 7

析构函数是隐式的 noexcept,除非任何成员变量析构函数或基类析构函数已标记为noexcept(false)或析构函数本身显式标记为noexcept(false)