当你能够选择时,将参数作为指针传递而不是值通常被认为是更好的选择?显然这在很大程度上取决于具体情况,但当有选择时,使用指针更好吗?
这是否仅仅是出于内存的原因?
如果是这样,那么更好的传递方式是指针还是引用?
当你能够选择时,将参数作为指针传递而不是值通常被认为是更好的选择?显然这在很大程度上取决于具体情况,但当有选择时,使用指针更好吗?
这是否仅仅是出于内存的原因?
如果是这样,那么更好的传递方式是指针还是引用?
一些常规的经验法则:
如果需要修改它,请传递指针或引用。如果值可能为null,传递指针,否则传递引用。
如果对象很大,请传递const指针或const引用,具体取决于null是否是合法值。
如果使用指针,请优先使用智能指针而不是裸指针。
否则,请按值传递。
const
引用而不是非const
引用。这是因为当你通过值传递参数时,函数无法修改调用者的值的副本。因此,为了保持相同的语义,通过const
引用传递参数,因为通过非const
引用传递参数,函数可能会改变调用者的值。希望这样说得清楚。 - John Dibling在C++中,当你按值传递时,它会调用自定义类的复制构造函数。如果你正在传递向量或大型数据结构,则这可能非常昂贵。
你应该使用const和引用来避免复制,同时仍保护值。否则,对于像int这样的较小的东西使用值通常是合理的。
永远不要传递指针,这是最佳实践。
使用const引用传递以避免复制的成本。
如果希望函数修改原始数据,则通过引用传递。
否则,请通过值传递。
指针不应该被裸传(没有所有权语义),指针也不应该在智能指针或容器类之外保留。
仅当对象可能为NULL且明确未传递所有权(通过大量文档)时,才应传递指针。
我唯一期望看到指针的情况是无法使用引用时(例如它可能为空),而这几乎永远不会发生(除非深度嵌套在容器方法中)。
NULL
可能是函数的有效参数时,使用引用可能没有意义;不能使用智能指针。 - Nawaz这取决于您传递的参数类型。如果参数大小合理(再次由您决定)较低,则可能希望按值传递。
对于大型结构体/数组,始终最好通过指针或引用进行传递。除此之外,如果参数不应该被修改,则还可以添加const
。