我的班级有std::stringstream
成员:
class Buffer
{
std::stringstream ss_;
};
它的移动构造函数是
Buffer::Buffer(Buffer&& buf)
: ss_(std::move(buf.ss_))
{
}
我怀疑移动操作不会抛出,因此移动构造函数可能是noexcept
。所以我的问题是:
noexcept
,例如std::stringstream::str
?stringstream
不是noexcept
,我是否仍然可以声明Buffer
成员noexcept
并在遇到异常时拨打std::unexpected()
是stringstream
抛出的?从我能找到的情况来看就是这样。noexcept
?noexcept
,我是否可以期望编译器确定STL容器是否可以使用move或者需要进行复制?答案 0 :(得分:1)
noexcept(std::declval<std::stringstream>().str())
是
nothrow(true)
exception specification when the conditions are met,也就是说,基类和成员的相应特殊成员函数也必须是nothrow(true)
。