C++"最佳"参数传递方法

Xav*_*olt 7 c++ performance coding-style parameter-passing

我今天正在编写一个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) {...}
Run Code Online (Sandbox Code Playgroud)

假设#3出于性能原因(是的,我知道编译器已经相当好,但仍然如此),其他两个或多或少相当.

那么:什么是"最好的"方法?指针?参考文献?两者的某种组合?或者甚至重要吗?技术原因是最好的,但风格的原因同样好.

更新: 我接受了YeenFei的答案,因为它处理了为我提供的差异(即使我然后明确地忽略了他的建议 - 我喜欢将NULL作为选项......).但每个人都提出了很好的观点 - 特别是GMan(在评论中)和Nemo,在回答性能和价值传递的过程中.如果您在这里寻求答案,请检查所有答案!

Yee*_*Fei 4

如果您的论点预​​计有效,我建议通过引用传递您的论点。这将是一种设计优化,使您免于防御性编程

引用不能为空,而指针可以。 如果您正在处理指针,则在使用它们之前,您需要验证给定的指针是否有效(非空),无论它是原始形式还是包装在托管容器(shared_ptr)中。

  • @Mark:我们之前已经讨论过这个问题。在有效的程序中,引用不能为空,而指针可以。没有“实际上”。引用也不能“为”null,因为您无法获取 null 的地址。 (2认同)