将Eigen对象作为参数传递时的指针与参考差异

joa*_*dre 2 c++ pointers reference eigen

如果a有一个以特征矩阵作为参数的函数,那么它们之间会有什么区别:

void foo(Eigen::MatrixXd& container){
    for(i=0;i<container.rows();i++){
        for(j=0;j<container.cols();j++){
            container(i,j)=47;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

void foo(Eigen::MatrixXd* container){
    for(i=0;i<container->rows();i++){
        for(j=0;j<container->cols();j++){
            container->coeffRef(i,j)=47;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eigen文档中,它们只提供了第一种方法 - 这是否意味着该方法有任何优势?const在第一种情况下传递Matrix引用时不使用的缺点是什么?

Dav*_*own 5

引用很好,因为没有null引用这样的东西,所以使用引用参数可以降低某人使用无效值调用函数的风险.

另一方面,一些编码标准建议制作您打算修改指针而不是非const引用的参数.这会强制调用者明确地获取他们传递的任何值的地址,从而使值更明显地被修改.指针与非const引用的选择取决于您.

但是,如果您不打算修改参数,那么将其作为const引用绝对是可行的方法.它避免了传递无效指针的问题,允许您传入临时值,并且调用者不关心参数是否通过引用获取,因为它不会被修改.