这个问题与此 C++ 静态分析规则是否有意义?,但有些不同。我现在实现了一个静态分析规则来查找函数返回其 const 引用参数作为引用的情况,例如
const X& f(const X& x) { return x; }
当临时对象绑定到 时,这可能是不可靠的x
,因为临时对象的生命周期将在 的返回值f
可以绑定到调用者中的引用之前结束。换句话说,这将是有问题的:
const X& r = f(X());
在运行规则时,我min
在标准库中找到了一个如下所示的实现:
template<typename _Tp>
inline const _Tp&
min(const _Tp& __a, const _Tp& __b)
{
// concept requirements
__glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
//return __b < __a ? __b : __a;
if (__b < __a)
return __b;
return __a;
}
这清楚地将其 const 引用参数作为引用返回,但函数是inline
. 这对临时寿命有影响吗,还是真的有点狡猾?该函数标有以下注释,因此它显然可以在临时对象上调用:
* This is the simple classic generic implementation. It will work on
* temporary expressions, since they are only evaluated once, unlike a
* preprocessor macro.