c – 使内联函数影响与其参数绑定的临时值的生命周期吗?

c – 使内联函数影响与其参数绑定的临时值的生命周期吗?,第1张

概述这个问题与 Does this C++ static analysis rule make sense as is?有关,但有些不同.我现在已经实现了一个静态分析规则来查找函数返回其const引用参数作为引用的情况,例如 const X& f(const X& x) { return x; } 当临时绑定到x时,这可能是狡猾的,因为临时的生命周期将在f的返回值绑定到调用者中的引用之前结束.换句话说 这个问题与 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'] );

除了在这种特殊情况下,局部变量将是值,而不是引用.

总结

以上是内存溢出为你收集整理的c – 使内联函数影响与其参数绑定的临时值的生命周期吗?全部内容,希望文章能够帮你解决c – 使内联函数影响与其参数绑定的临时值的生命周期吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1226075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存