可以考虑使用 C++ 引用给函数参数一个新名称吗?

Can usage of C++ references be considered giving a function parameter a new name?

有人告诉我,为函数参数指定具体名称可以提高可读性,但是如果该函数是某个数学公式的实现,其中变量名称按照惯例是单个字母,我该怎么办?

我在示例中所做的是正确的方法吗?

void EKF::update(const Vector& innovation, const Matrix& innovationCovariance, const Matrix& measurementObservationJacobian) {
    const Vector& y = innovation;
    const Matrix& S = innovationCovariance;
    const Matrix& H = measurementObservationJacobian;

    const Vector K = P * H.transpose() * S.invert();
    /* More temporary variables and calcuations follow */
}

编辑:根据KF

添加更具体的示例

您所做的没有任何“错误”。

这实际上是对引用的一种很好的使用:您的函数参数名称是描述性的和自我记录的(大概),但是您也清楚地将它们映射到另一个领域的现有术语。这使您的表达式易于阅读(大概),并且不会在性能或可维护性方面花费您任何费用。

这也与您在“现实生活”中编写算法的方式非常相似。您首先列出单字符变量并解释它们是什么;然后你在公式中使用它们。因此,如果您打算坚持原始算法形式,这是将其放入代码中的好方法。

而且,是的,它可以被描述为给函数参数一个新名称。这通常是引用所做的:为预先存在的事物引入一个新名称。

但是请注意,此模式的可接受程度完全是主观的,如果您在项目的许多地方使用它,您可能会引起一些注意。

此外,如果这些单字母名称 完全 常规,并且您的目标受众将永远成为领域专家,您可能会发现原来的短名称,尽管在编程意义上不清楚,实际上比您自己编写的更长的名称更容易让读者在调用站点和接口文档中快速理解。

我不认为这个想法有什么问题,但我不明白为什么只使用正确的名称并正确记录接口更可取。例如,使用 Doxygen 语法:

/** Update function for Extended Kalman Filter
 *
 * @param y  Innovation or measurement pre-fit residual
 * @param S  Innovation (or pre-fit residual) covariance
 * @param H  Measurement observation Jacobian (matrix of partial derivatives)
 *
 * More complete description here, blah blah.
 */
void EKF::update(const Vector& y, const Matrix& S, const Matrix& H) {
    const Vector K = P * H.transpose() * S.invert();
    /* More temporary variables and calcuations follow */
}