[英]What is the difference when passing function's reference and lambda expression as arguments?
[英]Pointer vs Reference difference when passing Eigen objects as arguments
如果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文檔中 ,它們只提供了第一種方法 - 這是否意味着該方法有任何優勢? 在第一種情況下傳遞Matrix引用時不使用const
會有什么缺點?
引用很好,因為沒有null引用這樣的東西,所以使用引用參數可以降低某人使用無效值調用函數的風險。
另一方面, 一些編碼標准建議制作您打算修改指針而不是非const引用的參數。 這會強制調用者明確地獲取它們傳遞的任何值的地址,從而使值更明顯地被修改。 指針與非const引用的選擇取決於您。
但是,如果您不打算修改參數,那么將其作為const引用絕對是可行的方法。 它避免了傳遞無效指針的問題,允許您傳入臨時值,並且調用者不關心參數是否通過引用獲取,因為它不會被修改。
使用C ++代碼,可以期望如果參數作為指針而不是引用傳遞,則空指針是有效參數。
也就是說,默認情況下您應該使用參考參數。 如果參數以某種方式“可選”,並且您希望調用者能夠傳遞空指針以表示“無值”,則僅使用指針。
看到這條線:
container(i,j)=47.
這不是一個常量操作,所以你不能將它設置為const。
引用與指針不同的一種方式是容器引用不能為null。 通過引用傳遞是避免一些錯誤,同時獲得不復制的好處的好方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.