c – 使内联函数影响与其参数绑定的临时值的生命周期吗?
发布时间:2020-12-16 07:00:44 所属栏目:百科 来源:网络整理
导读:这个问题与 Does this C++ static analysis rule make sense as is?有关,但有些不同.我现在已经实现了一个静态分析规则来查找函数返回其const引用参数作为引用的情况,例如 const X f(const X x) { return x; } 当临时绑定到x时,这可能是狡猾的,因为临时的生
这个问题与
Does this C++ static analysis rule make sense as is?有关,但有些不同.我现在已经实现了一个静态分析规则来查找函数返回其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引用参数作为引用返回,但函数是内联的.这在临时寿命方面是否有所不同,或者这真的有点狡猾?该函数标有以下注释,因此它显然可以在临时值上调用: * This is the simple classic generic implementation. It will work on * temporary expressions,since they are only evaluated once,unlike a * preprocessor macro. 解决方法
函数是否内联是完全没有区别的
任何临时的生命.绑定函数的返回值 就像你的f(或std :: min)到一个带有局部范围的const引用一样 肯定的方式结束悬挂参考.但我没有看到哪里 有任何真正的危险,因为这不是你会做的事情 合理的代码,除非引用是长期存在的东西 第一名,例如: T const& obj = std::min( myMap['x'],myMap['y'] ); 除了在这种特殊情况下,局部变量将是值,而不是引用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |