这个函数 returns 是一个正确的 R 值参考还是 returns 一个副本?

Does this function returns a proper R-value reference or does it returns a copy?

Quaternion&& GetInverse() const
{
     return Quaternion( GetConjugate() / GetSquaredMagnitude() ); 
}

我想知道 return 会编辑什么,以及 return 一个 Rvalue 或简单地 return 一个副本是否更有效。

也许我完全错了,这里根本就没有副本。 任何信息将不胜感激。 ^^;

Quaternion&&是一个r值引用,但它仍然是一个引用。在您的代码示例中,您将返回对临时对象的引用,该对象将在 GetInverse() returns 之后被销毁,并且该引用将悬空。这不是优化,而是未定义的行为。

现代编译器能够检测到此类错误。例如,GCC complains:

warning: returning reference to temporary [-Wreturn-local-addr]
    8 |      return Quaternion();

按值返回是这里的最佳选择。由于 C++17 复制省略在这种情况下是 mandatory