按值传递数组

Passing array by value

本文关键字:数组 按值传递      更新时间:2023-10-16

是否可以将数组按值传递给c++函数?

如果是,我该怎么做呢?

如果数组是指raw数组,那么答案是No。在C或c++中都不能按值传递它们。

这两种语言都提供了一种解决方案,您可以在该数组周围包装struct并传递其对象。例子:

struct MyArray { int a[100]; };
...
struct MyArray obj; // `obj.a[]` is the array of your interest
foo(obj);  // you have passed the `a[]` by value

在c++中,这样的结构体很容易以std::vectorstd::array的形式获得。

绝对:

void foo(std::array<int, 42> x);

通常将数组传递给函数会使其衰减为pointer。隐式地将数组的(起始)地址传递给函数。你不能按值传递数组。如果要按值传递内容,为什么不使用va_args呢?

可以。您可以通过使用指针作为参数来实现它,但是在函数体中,您可以使用复制方法(确切的名称我记不清了)来复制它。