繁体   English   中英

c ++通过const指针传递或引用const指针

[英]c++ passing by const pointer or reference to const pointer

我正在学习c ++,最近我读了一本书,建议你尽可能使用const引用(如果基础对象不会改变)。

我有一个问题,如果可能的话,你应该传递对const指针的引用而不是const指针,因为引用可以防止复制。 如果不是什么时候我应该使用const指针的引用。

例如:

Node(..., Node *const next = nullptr);

要么

Node(..., Node* const& next = nullptr);

通过const引用传递是一种很好的做法,当传递值(导致复制参数)是一个繁重的操作。

例如,当您将具有某些属性的类传递给函数时,最好通过const引用传递它,另一方面,如果您传递的类型如int或只是指针,最好不要使用引用,因为这样会因为去引用过程。

由于引用本质上是指针,因此通过引用传递指针没有性能提升。

如果您打算修改指针值,则只能使用对指针的引用。 例如:

ErrorCode MakeSomeObjectForMe(Object *&ptr) {
    if (badPreCondition) {
        return SomeSpecificError;
    }
    ptr = new Object();
    return Succuess;
} 

// Use ptr outside the function.

否则它不是一个好主意,因为它可能会通过双重间接使您的性能降低。 所以你可能永远不会const &传递给指针。

作为一个例子,在并发编程中,将ref传递给const ptr到工作线程可以用作通信装置; ptr可能实际上不是const。

mutex sync;
void task(int*const&);
int main(){
    int *paramptr=nullptr;
    thread woker{task,paramptr};
    sync.lock();
    paramptr=whatever;
    sync.unlock();
    worker.join();
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM