std :: string的默认构造函数是否为throw?

时间:2013-01-20 02:41:30

标签: c++ stdstring c++03 default-constructor nothrow

能     std :: string s; 在任何情况下扔?这是否受标准规范(对C ++ 03感兴趣,如果存在差异)?

3 个答案:

答案 0 :(得分:5)

在C ++ 11中,默认构造函数实际上采用一个(默认)参数,即分配器(21.4.2):

explicit basic_string(const Allocator& a = Allocator());

此构造函数未声明为noexcept。 (我想这需要分配器有一个非抛出的复制构造函数。)正如Jonathan和Bo指出的那样,分配器的复制构造函数不能抛出任何异常,但是允许字符串的构造函数执行抛出操作(例如,分配一块初始内存)。当然可以编写一个类似字符串的类作为无抛出的constexpr构造函数,但标准库字符串未指定为类似。

答案 1 :(得分:3)

WG21/N4002改变了这一点。我看到的第一份工作文件包含WG21/N4296 // 21.4.2, construct/copy/destroy: basic_string() noexcept : basic_string(Allocator()) { }

答案 2 :(得分:-1)

如果由于任何原因无法进行分配,它会抛出