考虑以下功能:

void shrink_string(std::string& str) {
  if (str.size() >= 2) {
    str.resize(str.size() - 2);
  }
}

我想知道是否可以将此函数声明为noexcept(假定为C++ 11标准)吗?我知道the documentation不会将.resize()声明为noexcept,但这主要是因为此方法可用于增长和收缩字符串。

显然,可以通过使弦的容量保持不变并简单地减小内部长度来实现收缩。同时resize()可能决定无论如何都要重新分配,以释放一些内存,但是如果重新分配抛出错误,它会退回到琐碎的调整大小吗?

最佳答案

docs:



因此,将 vector 的大小调整为较小的值不会改变内存(使用shrink_to_fit代替(建议a)将容量减小到该大小)。这是因为操作系统中没有标准的方法来调整内存大小并强制指针相同。

例如,在Windows中,HeapReAlloc()可能会或可能不会返回相同的指针,但是您不能强制其返回相同的指针。

关于c++ - 缩小时std::string::resize()可以抛出吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62140624/

10-13 07:05