我有一个非常简单的方法,并且它的 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"
}
我不明白这个警告有两个原因:
properties_
是一个成员变量,它的下标运算符(它是 aQMap
)返回一个引用,所以不应该有任何临时变量,并且它在对象的生命周期内是持久的。- 为什么警告出现在 const 重载而不是原来的?
我可以#pragma
隐藏警告,但我真的很想知道它为什么给我警告 - 有什么建议吗?