这个方法会抛出异常吗?

问题描述 投票:0回答:1

考虑:

template <typename T>
struct S
{
    auto Value() const
    {
        return value;
    }

    T value;
};

Value()
可以抛出异常吗?为什么或者为什么不?如果不是,将此方法标记为
noexcept
是否安全?

我根本不明白的是

return value;
是否会抛出异常。

c++ exception return-by-value
1个回答
0
投票

Value()
可能会引发异常,因此您不应将其标记为
noexcept

这可能会发生,因为

Value()
按值返回
T
对象。
这意味着将创建一个副本,并且
T
的复制构造函数可能会抛出异常。

即使应用复制省略,也不会改变这一点。

value
成员的内容仍需要复制(或移动)到调用该方法的目标对象中。这可以通过执行
T
的相关构造函数(复制或移动)来完成,这可能会抛出异常。

© www.soinside.com 2019 - 2024. All rights reserved.