【发布时间】:2011-10-18 18:04:45
【问题描述】:
我今天正在编写一个 C++ 类,并且我编写了一个函数,该函数将参数作为引用而不是指针,这是我很少做的事情。我总是通过指针。所以我正要改回来,然后我意识到 - 我不知道我是否应该这样做,或者它是否重要。
所以我转向你们。我有三种传递参数的方式:
//1: By pointer
Object* foo(Object* bar) {…}
//2: By reference
Object& foo(Object& bar) {…}
//3: By value (just for completeness)
Object foo(Object bar) {…}
假设 #3 出于性能原因而退出(是的,我知道编译器在这方面做得很好,但仍然如此),其他两个或多或少是等价的。
那么:“最好”的方法是什么?指针?参考?两者的某种组合?或者它甚至重要吗?技术原因是最好的,但风格原因同样好。
更新:我已经接受了 YeenFei 的回答,因为它处理了对我来说很重要的差异(即使我后来故意忽略了他的建议 - 我喜欢将 NULL 作为一个选项...... )。但是每个人都提出了很好的观点 - 特别是 GMan(在 cmets 中)和 Nemo,在处理性能和传递价值的答案中。如果您在这里寻求答案,请全部查看!
【问题讨论】:
-
由于您省略了函数体,我猜您认为它无关紧要。我向你保证不是。
-
最好的什么?如果要引用对象,请使用引用。如果您想指向一个对象,或者可能根本没有对象(null),请使用指针。如果您想要自己的副本,请使用值。
-
Pointer vs. Reference 的可能重复项
-
无论有什么原因,性能都不是其中之一。
-
不同意性能不是问题。实际上,对于小对象,#3 几乎肯定会最快...别名问题往往会导致指针和引用生成比值更慢的代码。通常要慢得多。
标签: c++ performance coding-style parameter-passing