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);
由于引用本质上是指针,因此通过引用传递指针不会提高性能。
当按值传递(导致复制参数)是一项繁重的操作时,按常量引用传递是一个很好的做法。
例如,当您将具有某些属性的 class 传递给函数时,最好通过 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;
}
我正在学习c++,最近我看了一本书,书中建议你应该尽可能使用对const的引用(如果基对象不会被改变)。
我有一个问题,您是否应该尽可能传递对 const 指针的引用而不是 const 指针,因为引用可以防止复制。如果不是,我什么时候应该使用对 const 指针的引用。
例如:
Node(..., Node *const next = nullptr);
或
Node(..., Node* const& next = nullptr);
由于引用本质上是指针,因此通过引用传递指针不会提高性能。
当按值传递(导致复制参数)是一项繁重的操作时,按常量引用传递是一个很好的做法。
例如,当您将具有某些属性的 class 传递给函数时,最好通过 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;
}