如果a有一个以特征矩阵作为参数的函数,那么它们之间会有什么区别:
void foo(Eigen::MatrixXd& container){
for(i=0;i<container.rows();i++){
for(j=0;j<container.cols();j++){
container(i,j)=47;
}
}
}
和
void foo(Eigen::MatrixXd* container){
for(i=0;i<container->rows();i++){
for(j=0;j<container->cols();j++){
container->coeffRef(i,j)=47;
}
}
}
在Eigen documentation中,他们只提出第一种方法 - 这是否意味着该方法有任何优势?在第一种情况下传递Matrix引用时不使用const
有什么缺点?
答案 0 :(得分:5)
引用很好,因为没有null引用这样的东西,所以使用引用参数可以降低某人使用无效值调用函数的风险。
另一方面some coding standards建议创建您想要修改指针而不是非const引用的参数。这会强制调用者明确地获取它们传递的任何值的地址,从而使值更明显地被修改。指针与非const引用的选择取决于你。
但是,如果您不打算修改参数,那么将它作为const引用绝对是可行的方法。它避免了传递无效指针的问题,允许你传递临时值,并且调用者并不关心参数是否通过引用来处理,因为它不会被修改。
答案 1 :(得分:3)
使用C ++代码,可以期望如果参数作为指针而不是引用传递,则空指针是有效参数。
也就是说,默认情况下你应该使用参考参数。如果参数以某种方式“可选”,并且您希望调用者能够传递空指针以表示“无值”,则仅使用指针。
答案 2 :(得分:0)
见行:
container(i,j)=47.
这不是一个常量操作,所以你不能将它设置为const。
引用与指针不同的一种方式是容器引用不能为null。通过引用传递是避免一些错误,同时获得不复制的好处的好方法。