gpt4 book ai didi

C++ "warning: returning reference to temporary "- 但它不是

转载 作者:太空狗 更新时间:2023-10-29 23:41:33 27 4
gpt4 key购买 nike

我有一个非常简单的方法,以及它的 const 重载。

Sy_animatable::PropertyTimeLine&
Sy_animatable_imp::getPropertyTimeLine( const QString& property )
{
if ( !properties_.contains( property ) ) {
throw Sy_unknownAnimPropertyException( property );
}

return properties_[property];
}

const Sy_animatable::PropertyTimeLine&
Sy_animatable_imp::getPropertyTimeLine( const QString& property ) const
{
if ( !properties_.contains( property ) ) {
throw Sy_unknownAnimPropertyException( property );
}

return properties_[property]; // "warning: returning reference to temporary"
}

我不明白这个警告有两个原因:

  1. properties_ 是一个成员变量,它的下标运算符(它是一个 QMap)返回一个引用,所以不应该有任何临时变量,它在整个生命周期内都是持久的对象的。
  2. 为什么警告出现在 const 重载中而不是原来的?

我可以在 #pragma 行中隐藏警告,但我真的很想知道为什么它会给我警告 - 有什么建议吗?

最佳答案

看起来 []-operator for QMap 具有奇怪的语义,有时会生成对临时对象的常量引用(如果没有具有给定键的元素),而且那个的生命周期还不够长。

尝试使用 return properties_.find(property).value(); 代替。

关于C++ "warning: returning reference to temporary "- 但它不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10163842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com