【发布时间】:2020-06-01 20:36:37
【问题描述】:
考虑以下函数:
void shrink_string(std::string& str) {
if (str.size() >= 2) {
str.resize(str.size() - 2);
}
}
不知道这个函数能不能声明为noexcept(假设C++11标准)?我知道the documentation 没有将.resize() 声明为noexcept,但这主要是因为此方法可用于增长和缩小字符串。
显然,通过保持字符串容量不变并简单地减少内部长度,可以轻松实现收缩;同时resize() 可能会决定重新分配,以释放一些内存——但如果重新分配引发错误,它会退回到微不足道的调整大小吗?
【问题讨论】:
-
还有回收空间的意图吗?那么
resize不会那样做。 -
我认为很明显的意图是删除字符串的最后两个字符。所涉及的空间非常微不足道。