この質問は、この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.