我正在学习c ++,最近我读了一本书,建议你尽可能使用const引用(如果基础对象不会改变)。
我有一个问题,如果可能的话,你应该传递对const指针的引用而不是const指针,因为引用会阻止复制。如果不是,我什么时候应该使用const指针。
例如:
Node(..., Node *const next = nullptr);
OR
Node(..., Node* const& next = nullptr);
答案 0 :(得分:3)
通过const引用传递是一种很好的做法,当传递值(导致复制参数)是一个繁重的操作。
例如,当您将具有某些属性的类传递给函数时,最好通过const引用传递它,另一方面,如果您传递的类型如int
或只是指针,则#&# 39;最好不要使用引用,因为那样由于去引用过程而导致性能下降。
答案 1 :(得分:1)
由于引用本质上是指针,因此通过引用传递指针没有性能提升。
答案 2 :(得分:1)
如果您打算修改指针值,则只能使用对指针的引用。例如:
ErrorCode MakeSomeObjectForMe(Object *&ptr) {
if (badPreCondition) {
return SomeSpecificError;
}
ptr = new Object();
return Succuess;
}
// Use ptr outside the function.
否则这不是一个好主意,因为它可能会通过双重间接使您的性能降低。因此,您可能永远不会将const &
传递给指针。
答案 3 :(得分:0)
作为一个例子,在并发编程中,将ref传递给const ptr到工作线程可以用作通信手段; ptr实际上可能不是常量。
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;
}