所以我只是在关注自己的业务,查看我编写的一些代码,然后我注意到我做了一些事情。我引用了 protected 数据 float& px = A->p.x
我这样做纯粹是为了缩短 if 语句的宽度并使其更具可读性。该函数当然被声明为类的友元,因此它可以访问 protected 数据。此外,还有 4 篇相似的引用文献。
我想知道这是否是提供引用的正当理由。 如果没有,是否有正当理由创建一个引用,该引用绝不是正在使用的函数的参数。
例子:
void generic_function(A_class* A)
{
float& x = A->x;
//purposeful and valid code using x?
}
我尽我所能地表达了这个问题,如果它没有传达我提出问题的目的,我深表歉意。
编辑: 作为重点。我关注实时应用程序设计的优化。
最佳答案
毫无疑问,这是一种非常有效的引用方式。任何时候你需要一个内存中另一个位置的替代品来缩短你的代码,引用都是一个完美的选择。在您的情况下,它还缩短了取消引用链:如果您多次使用 x
,例如,在一个循环中,您将减少取消引用的次数,因为您不再需要阅读A
以到达其中的 x
。编译器可能足够聪明,可以为您优化取消引用,因此您不应该将其作为微优化问题来进行。
使用引用的另一个正当理由是访问容器内的缓存值。从 std::map
访问缓存值的常见模式是将值读入引用,检查它,然后分配给引用,从而绕过映射中的第二次查找。这样做的时机可能很重要,尤其是在紧密的循环中,因此可以将对 map 的引用视为一种优化技术。
关于c++ - 引用本地可访问数据的正当理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21948535/