考虑:
template <typename T>
struct S
{
auto Value() const
{
return value;
}
T value;
};
Value()
可以抛出异常吗?为什么或者为什么不?如果不是,将此方法标记为 noexcept
是否安全?
我根本不明白的是
return value;
是否会抛出异常。
Value()
可能会引发异常,因此您不应将其标记为 noexcept
。
这可能会发生,因为
Value()
按值返回 T
对象。T
的复制构造函数可能会抛出异常。
即使应用复制省略,也不会改变这一点。
value
成员的内容仍需要复制(或移动)到调用该方法的目标对象中。这可以通过执行 T
的相关构造函数(复制或移动)来完成,这可能会抛出异常。