Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;引用是否被视为赋予函数参数一个新名称?_C++_Eigen - Fatal编程技术网

C++ C++;引用是否被视为赋予函数参数一个新名称?

C++ C++;引用是否被视为赋予函数参数一个新名称?,c++,eigen,C++,Eigen,有人告诉我,给函数参数指定具体的名称可以提高可读性。但是,如果函数是某个数学公式的实现,按照惯例,变量名是单个字母,我该怎么办 我在示例中所做的是正确的方法吗 void EKF::update(const Vector& innovation, const Matrix& innovationCovariance, const Matrix& measurementObservationJacobian) { const Vector& y = innov

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

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

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 */
}
编辑:根据你所做的一切,添加一个更具体的例子

这实际上是对引用的一个很好的使用:函数参数名是描述性的和自文档化的(大概),但是您还可以清楚地将它们映射到另一个域中的现有术语。这使您的表达式易于阅读(大概是这样),并且不应该在性能或可维护性方面花费任何成本

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

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

但是,请注意,这种模式的可接受程度完全是主观的,如果您在项目的许多地方使用它,您可能会感到惊讶


此外,如果这些单字母名称完全是传统的,并且您的目标受众将永远都是领域专家,那么您可能会发现,尽管最初的短名称在编程意义上不清楚,但实际上更容易让您的读者在callsite和您的接口文档中快速理解,比你自己编的更长的名字要好。

我不认为这个想法有什么错,但我不明白为什么只使用正确的名字并正确地记录接口更好。例如,使用Doxygen语法:

扩展卡尔曼滤波器的更新功能 * *@参数y创新或测量预配合剩余 *@param S创新(或预拟合残差)协方差 *@param H测量观测雅可比矩阵(偏导数矩阵) * *这里有更完整的描述,诸如此类。 */ 无效EKF::更新(常数向量和y、常数矩阵和S、常数矩阵和H){ 常量向量K=P*H.转置()*S.反转(); /*接下来是更多的临时变量和计算*/ }
从技术上讲,您所做的一切都没有错,但这是否是一种改进将在很大程度上取决于观众。@Markransem:只要新变量的类型与参数相同,它肯定是安全的吗?但它可能会破坏某些优化。@Markransem:当然,但我看不出任何类似于OP的示例(类型相同)会导致未定义的行为。“严格的别名”在这里不起作用。我在考虑这样一种情况:编译器可能知道原始参数之间没有别名(就像使用类似于C的
restrict
)的扩展一样),但无法确定本地引用也没有别名,因此必须生成低效(但正确)的代码,假定它们可能有别名。我应该说“阻止优化”,而不是“中断优化”。我将使用
y
S
H
作为函数参数,它们很短,但如果您了解约定,则非常具体(且易于阅读)。如果您的用户不使用相同的约定,那么关于所用约定的一些常规文档可能会很有用。@Markransem会的,但是为什么这种模式会违反别名规则呢?我看不到它离他们越来越近,从我的头顶上。你需要一个强大的演员阵容,比如《代码》重新诠释(或者C风格的演员阵容)来实现这一点,这是精心设计的。你的回答总结了我的内心想法。如果我们都使用相同的约定(事实并非如此),我肯定会选择单字母参数名称。目前,我正试图找出其他更有经验的开发人员会做些什么。@AleksanderBobiński好吧,总结一下,对于值得做的事情,我会完全按照您所拥有的去做(并且很好地处理所有的
常量
和格式!)。但你和我只是两个人