C++ "Best"参数传递方式

标签 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) {…}

假设 #3 出于性能原因(是的,我知道编译器在这方面做得很好,但仍然如此),其他两个或多或少是等效的。

那么:“最佳”方法是什么?指针?引用?两者的某种结合?或者它甚至重要吗?技术原因是最好的,但文体原因同样好。

更新:我已经接受了 YeenFei 的回答,因为它处理了对我来说确定它的差异(即使我随后有针对性地忽略了他的建议 - 我喜欢将 NULL 作为一个选项...... ).但是每个人都提出了很好的观点 - 特别是 GMan(在评论中)和 Nemo,在处理性能和按值(value)传递的答案中。如果您是来这里寻找答案的,请检查所有答案!

最佳答案

如果预期有效,我建议通过引用传递您的论点。这将是一个设计优化,让您免于 defensive programming .

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

关于C++ "Best"参数传递方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6920917/

相关文章:

c++ - 使用模板和基类实现灵活的数组成员

java - 单行函数是否需要大括号?

c++ - 在 Linux 上嗅探以太网接口(interface)

c++ - 如何在 excel 退出期间调试 c++ excel 插件的异常

c++ - 链表中的链表 - 节点无法初始化

c - 将未排序的连续字符串数组有效地排序到文件中

ios - mxSignpost 事件在 Xcode Organizer 中可见吗?

php - Node.js PHP 性能

ruby - 使用 do block 与大括号 {}

python - 在 Python 中创建一个空列表