【发布时间】:2014-12-26 03:34:43
【问题描述】:
我正在用 C++ 编写代码。如果我有一些函数void foo(vector<int> test) 并在我的程序中调用它,那么向量是按值传递还是按引用传递?我不确定,因为我知道向量和数组是相似的,并且像 void bar(int test[]) 这样的函数会通过引用(指针?)而不是值来传递测试。我的猜测是,如果我想避免按值传递,我需要通过指针/引用显式传递向量,但我不确定。
【问题讨论】:
-
C++ 有“按值传递”的语义,所以是按值传递的。不过,您可以决定通过引用传递。选择实际上取决于函数的作用。
-
通过引用使用,如果您不希望函数更改矢量内容使其成为 const,否则只需通过引用传递它。它将避免不需要的和昂贵的(有时)复制
-
另外,引用不是指针。
-
@AliKazmi 除非你想在函数体中复制。
-
这取决于你想要达到的目标。有时使用标准智能指针之一很有用,例如,如果您想传递所有权,则使用 unique_ptr。但通常,我通过引用传递 std::vector。