【发布时间】:2018-08-31 04:44:55
【问题描述】:
我的代码中有一个固定大小的多维数组,我需要能够在单独的函数中更改其中的值。我想知道,std::arrays 是在方法中作为引用传递还是复制?那么我可以这样做吗:
using std::array;
void foo (array<array<int,WIDTH>,HEIGHT> bar);
//manipulates the values in the array
...
int main() {
array<array<int,WIDTH>,HEIGHT> baz;
...
foo(baz);
//baz is changed
}
或者我是否需要明确地将其转换为参考?我担心如果我创建了一个返回副本的数组函数,它会太乱而且没有那么快。
【问题讨论】:
-
std::array是一个以常规方式运行的常规类。没有类型作为参数得到特殊处理。 -
我假设因为它是 c 数组的包装器,所以它也将作为引用传递。
-
如果您有一个包含 C 数组的普通类定义,然后按值传递该类的实例,则内部数组成员字段将 复制 到一个新的实例。 std::array 的行为没有什么不同。
-
我猜您正在考虑将 C 数组衰减为指向其第一个元素的指针作为参数。请注意,在这种情况下,参数与数组的类型不同。实际参数是一个指针,它像其他所有内容一样被复制。
-
@Comrade_Comski 我想
std::array的设计目标之一是摆脱常规数组所获得的特殊处理。不然有什么意义?