【发布时间】:2013-08-07 20:08:34
【问题描述】:
所以我是一个相当有经验的 C 程序员,经常使用 C++ 编程。这门语言有一些我从来没有自信过的微妙之处。例如,传递参数的最佳方法。
例如,假设我有一个名为 Object 的黑盒类(据我们所知,它可能有很多成员变量)和一个函数 fn,它以 Object 实例的向量作为其参数。在我看来,有四种基本的传递方式:
void fn(vector<Object> vec);
void fn(vector<Object*> vec);
void fn(vector<Object> *vec);
void fn(vector<Object> &vec);
当然,我们也可以对这些功能进行一些组合。
我想确认一下:
方法 1 将复制向量类,包括向量中每个 Object 实例的副本。这可能是一个巨大的过载,因此很糟糕。
(这个我不太确定)方法 2 将复制 vec 的所有方法变量,但它只会复制每个 Object 实例的地址。我对向量类中包含的内容知之甚少,无法知道这是否可取。
方法 3 和 4 相当简单,彼此相似,并且引入的开销最小。
这一切都正确吗?记住我们对 Object 类一无所知,哪种方法是首选方法?
【问题讨论】:
-
首选方法取决于您要做什么,但如果您不想修改向量,也不想复制,则传递
const引用是通常的方法:void fn(const vecctor<Object>& vec);. -
How to pass parameters correctly? 的可能重复项 - 除了您的第二个选项没有被覆盖,因为它不完全相关
标签: c++ vector reference arguments