通过(常量)引用从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;} };
答案 0 :(得分:3)
假设您正在返回对在函数范围之外仍然存活的对象的引用,并且该函数在return
之前没有任何可能抛出的代码,那么...... 是,返回引用不能抛出异常。
struct Foo
{
std::string x;
const auto& get_x() noexcept { return x; }
// ^^^^^^^^
// Safe and recommended.
};
您添加了一些示例 - f
和get
都是例外安全的,可以标记为noexcept
。