开发者社区> 问答> 正文

将向量传递给函数,值与参考C ++

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

展开
收起
保持可爱mmm 2020-02-08 19:46:48 425 0
1 条回答
写回答
取消 提交回答
  • 如果我不得不猜测,我会说你来自Java背景。这是C ++,除非您使用&-operator 另行指定,否则事情将按值传递(请注意,此运算符也用作“ address-of”运算符,但在不同的上下文中)。一切都有据可查,但无论如何我都会重申:

    void foo(vector bar); // by value void foo(vector &bar); // by reference (non-const, so modifyable inside foo void foo(vector const &bar); // by const-reference 您也可以选择将指针传递给向量(void foo(vector *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); }

    2020-02-08 19:47:01
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载