如果我正确理解文档,std::string::replace
甚至可以用更长的字符串替换字符串的某些部分:
std::string s("hello");
s.replace(s.begin() + 1, s.end() - 1, ".....");
std::cout << s; // prints "h.....o"
如果容量不足以容纳新字符串,则可能需要重新分配。但是,replace
的异常规范在 C++11 标准中只提到了 out_of_range
和 length_error
异常(exception)。
在当前草案中,分配器的 allocate
抛出了额外指定的异常。成员函数 [string.replace.8.3] :
Throws: ...
— any exceptions thrown by
allocator_traits<Allocator>::allocate
.
我想知道为什么 C++11 中没有指定这些异常?库函数是否可以抛出未在 Throws: 子句中指定的其他异常?
最佳答案
这是一个错误;委员会最近才修复它。一些此类修复被明确称为具有追溯性(即,即使在旧语言模式下,实现也应以新方式运行)。这个不是,也许是因为,呃,任何实现都不太可能以任何其他方式表现。
简而言之,不要读太多。
关于c++ - 为什么 string::replace 在 C++11 中不指定分配器的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57749433/