可以 std::string s; 在任何情况下抛出?这是否受标准规范(对 C++03 感兴趣,以防有差异)?
问问题
2930 次
3 回答
5
在 C++11 中,默认构造函数实际上采用一个(默认)参数,即分配器(21.4.2):
explicit basic_string(const Allocator& a = Allocator());
此构造函数未声明为noexcept
. (我想这将要求分配器有一个非抛出的复制构造函数。)正如 Jonathan 和 Bo 指出的,分配器的复制构造函数不能抛出任何异常,但允许字符串的构造函数执行抛出操作(例如分配一个初始一段记忆)。当然应该可以编写一个类似字符串的类作为不抛出constexpr
构造函数,但标准库字符串没有指定为那样。
于 2013-01-20T02:52:49.027 回答
4
WG21/N4002 对此进行了更改。我看到的第一份工作文件是WG21/N4296:
// 21.4.2, construct/copy/destroy:
basic_string() noexcept : basic_string(Allocator()) { }
于 2015-04-12T15:32:06.307 回答
-2
当然,如果由于任何原因无法进行分配,它会抛出
于 2013-01-20T03:34:09.537 回答