3

我正在学习 c++,最近我读了一本书,其中建议您应该尽可能使用对 const 的引用(如果不会更改基本对象)。

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

例如:

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

或者

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

4 回答 4

3

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

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

于 2018-04-12T04:51:31.303 回答
1

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

于 2018-04-12T04:49:44.117 回答
1

如果您的意图是修改指针值,您只会使用对指针的引用。例如:

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

// Use ptr outside the function.

否则这不是一个好主意,因为它可能会通过双重间接来降低性能。因此,您可能永远不会将 a 传递const &给指针。

于 2018-04-12T06:07:31.210 回答
0

例如,在并发编程中,将 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;
}
于 2018-04-12T08:26:23.207 回答