簡體   English   中英

將Eigen對象作為參數傳遞時的指針與參考差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM