向量是通过值传递还是通过C ++中的引用传递给函数

亚当 :

我在用C ++编写代码。如果我有某些函数,void foo(vector<int> test)并且在程序中调用了该函数,那么该矢量将通过值或引用传递吗?我不确定,因为我知道向量和数组是相似的,并且类似的函数void bar(int test[])会通过引用(指针?)而不是值通过测试。我的猜测是,如果我想避免按值传递,则需要通过指针/引用显式传递向量,但我不确定。

JorenHeit:

如果我不得不猜测,我会说你来自Java背景。这是C ++,除非您使用&-operator进行其他指定,否则事情将按值传递(请注意,此运算符也用作“ address-of”运算符,但使用的是不同的上下文)。这一切都有据可查,但是我还是要重申:

void foo(vector<int> bar); // by value
void foo(vector<int> &bar); // by reference (non-const, so modifiable inside foo)
void foo(vector<int> const &bar); // by const-reference

您也可以选择将指针传递给向量(void foo(vector<int> *bar)),但是除非您知道自己在做什么,否则您会觉得这确实是可行的方法,请不要这样做。

另外,向量与数组一样!在内部,向量跟踪它为您处理内存管理的数组,但是其他许多STL容器也是如此。您不能将向量传递给需要指针或数组的函数,反之亦然(您可以访问(指向)基础数组并使用它)。向量是通过其成员函数提供许多功能的类,而指针和数组是内置类型。同样,向量是动态分配的(这意味着可以在运行时确定和更改大小),而C样式的数组是静态分配的(其大小是恒定的,必须在编译时知道),从而限制了它们的使用。

我建议您从总体上了解C ++的更多知识(特别是数组衰减),然后看一下以下程序,该程序说明了数组和指针之间的区别:

void foo1(int *arr) { cout << sizeof(arr) << '\n'; }
void foo2(int arr[]) { cout << sizeof(arr) << '\n'; }
void foo3(int arr[10]) { cout << sizeof(arr) << '\n'; }
void foo4(int (&arr)[10]) { cout << sizeof(arr) << '\n'; }

int main()
{
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    foo1(arr);
    foo2(arr);
    foo3(arr);
    foo4(arr);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在julia函数中:是通过引用还是通过值传递?

来自分类Dev

通过引用数组传递给C ++中的模板函数

来自分类Dev

在Go中,地图是通过值传递还是通过引用传递?

来自分类Dev

通过引用将栈分配的值传递给C ++中的构造函数

来自分类Dev

postgres函数参数是通过引用还是通过值传递的?

来自分类Dev

通过函数中的引用将const指针传递给const

来自分类Dev

如何在C中通过值将向量传递给函数

来自分类Dev

Python中的这些参数是通过值还是通过引用传递?

来自分类Dev

传递给函数的引用传递给函数

来自分类Dev

通过引用将指针传递给函数

来自分类Dev

是通过值快速传递还是通过引用快速传递

来自分类Dev

编码样式-通过引用传递还是通过值传递?

来自分类Dev

我应该在模板函数中通过常量引用还是通过值传递?

来自分类Dev

在C ++函数中,Rcpp对象如何传递给其他函数(通过引用或复制)?

来自分类Dev

VBScript通过引用(VarPtr)将值传递给ActiveX函数

来自分类Dev

通过引用将值传递给 void 函数

来自分类Dev

通过引用C ++代码中的Qore脚本函数传递值

来自分类Dev

通过C代码中的引用将结构传递给函数(编译错误)

来自分类Dev

如何在C ++中通过引用将对象传递给函数?

来自分类Dev

如何通过引用将二维数组传递给 C++ 中的函数

来自分类Dev

在Delphi中通过引用传递给const

来自分类Dev

使用python ctypes通过引用c ++函数传递长向量

来自分类Dev

将指针传递给接受C ++中的引用的函数

来自分类Dev

C ++通过引用函数传递

来自分类Dev

通过引用传递给接受通用引用的函数

来自分类Dev

引用传递给函数的参数

来自分类Dev

在底层,Rust中的向量是通过引用还是通过值返回的?

来自分类Dev

通过值传递,通过引用传递还是通过指针传递的性能成本?

来自分类Dev

C-通过引用和值将结构参数传递给函数

Related 相关文章

  1. 1

    在julia函数中:是通过引用还是通过值传递?

  2. 2

    通过引用数组传递给C ++中的模板函数

  3. 3

    在Go中,地图是通过值传递还是通过引用传递?

  4. 4

    通过引用将栈分配的值传递给C ++中的构造函数

  5. 5

    postgres函数参数是通过引用还是通过值传递的?

  6. 6

    通过函数中的引用将const指针传递给const

  7. 7

    如何在C中通过值将向量传递给函数

  8. 8

    Python中的这些参数是通过值还是通过引用传递?

  9. 9

    传递给函数的引用传递给函数

  10. 10

    通过引用将指针传递给函数

  11. 11

    是通过值快速传递还是通过引用快速传递

  12. 12

    编码样式-通过引用传递还是通过值传递?

  13. 13

    我应该在模板函数中通过常量引用还是通过值传递?

  14. 14

    在C ++函数中,Rcpp对象如何传递给其他函数(通过引用或复制)?

  15. 15

    VBScript通过引用(VarPtr)将值传递给ActiveX函数

  16. 16

    通过引用将值传递给 void 函数

  17. 17

    通过引用C ++代码中的Qore脚本函数传递值

  18. 18

    通过C代码中的引用将结构传递给函数(编译错误)

  19. 19

    如何在C ++中通过引用将对象传递给函数?

  20. 20

    如何通过引用将二维数组传递给 C++ 中的函数

  21. 21

    在Delphi中通过引用传递给const

  22. 22

    使用python ctypes通过引用c ++函数传递长向量

  23. 23

    将指针传递给接受C ++中的引用的函数

  24. 24

    C ++通过引用函数传递

  25. 25

    通过引用传递给接受通用引用的函数

  26. 26

    引用传递给函数的参数

  27. 27

    在底层,Rust中的向量是通过引用还是通过值返回的?

  28. 28

    通过值传递,通过引用传递还是通过指针传递的性能成本?

  29. 29

    C-通过引用和值将结构参数传递给函数

热门标签

归档