通过引用从c ++函数异常安全返回一个对象?

时间:2017-03-17 13:16:13

标签: c++

通过(常量)引用从c ++返回一个对象 - 函数通常是异常安全的 - 无论返回哪种对象(例如带有抛出copy-ctor的类对象)?两个示例案例:

示例1:

const T& f(const T& parm) {exception_safe_code; return parm;}

示例2:

template <typename T> struct X{ T t; T& get(){return t;} };

1 个答案:

答案 0 :(得分:3)

假设您正在返回对在函数范围之外仍然存活的对象的引用,并且该函数在return之前没有任何可能抛出的代码,那么...... ,返回引用不能抛出异常。

struct Foo
{
    std::string x;
    const auto& get_x() noexcept { return x; }
//                      ^^^^^^^^
//                      Safe and recommended.
};

您添加了一些示例 - fget都是例外安全的,可以标记为noexcept