返回对本地临时对象的引用

Returning reference to local temporary object

这个代码

virtual const core::matrix4& getViewMatrixAffector() const {return core::matrix4();};

结果警告告诉我 "Returning reference to local temporary object"...

如何解决这个警告?

如下所述,我试图删除“&”...

当您通过引用 return 时,如在 core::matrix4& 中,您需要一个在函数 return 时仍然存在的对象。在你的例子中,你正在 returning a "local temporary object",它在该函数退出后被破坏。为了解决这个问题,您需要按值 return,如下所示:

virtual const core::matrix4 getViewMatrixAffector() const {return core::matrix4();};
//                        ^ no '&'

当您创建一个对象作为局部临时对象时,它会在函数作用域结束时立即销毁。反过来,你永远不应该 return 引用它,因为这会产生未定义的行为。 考虑 return 按值对其进行处理,或 return 对免费存储中的对象进行智能指针处理。

如果它确实是您返回引用的本地对象,那么您不应该这样做,因为一旦函数 getViewMatrixAffector() returns.

由于您无法控制 return 类型,因此您必须确保 return 是一个有效的对象,而不仅仅是一个临时对象。一种解决方案是函数局部静态变量:

virtual const core::matrix4& getViewMatrixAffector() const
{
  static const core::matrix4 val;
  return val;
};

如果您发现自己在许多函数中都这样做(使用相同类型的变量),请将 val 设为 class.

的静态成员(适当重命名)

Intel C++ 14.0.3.202 给出此警告,即使引用在函数外有效。这只是我在这个版本中看到的一个错误,但它也可能出现在其他版本中。如果你使用这个版本:通过这样包装你的函数来掩盖警告:

#pragma warning(push)
#pragma warning(disable:473)
( your function definition )
#pragma warning(pop)

我不确定 473 是否是此警告的索引 - 但您在强制者的消息中看到了正确的索引。