在函数中操作 std::array
Manipulating std::array in a function
我的代码中有一个固定大小的多维数组,我需要能够在单独的函数中更改其中的值。我想知道,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
}
或者我需要明确地把它变成参考吗?我担心如果我创建一个返回副本的数组函数,它会太乱而且速度不快。
如果您想避免制作副本,请通过引用(或指针)传递:
void foo (array<array<int,WIDTH>,HEIGHT> &bar);
I want to know, are std::arrays passed as references in a method or is a copy made?
std::array
是值类型。如果按值传递,将(概念上)创建一个副本。
这与 c 风格数组 (int bar[HEIGHT][WIDTH]
) 的行为不同。 C风格的数组通过引用传递。这是由于很久以前 C 语言的一个基本设计决定(有些人会说是错误)。
do I need to explicitly turn it into a reference?
如果你想传递参考,是的。
I fear that if I created an array function that returned a copy, it would be too messy
函数式程序员会争辩说它更干净。
and not as fast.
小心这样的假设。出于其他原因,
a) 编译器并不总是按照你告诉他们的去做。他们可以编写代码,其效果就好像他们已经按照您告诉他们的那样做了,但可以更快地达到相同的结果。 (google: "as-if rule c++")
b) 现代 CPU 架构经过专门设计,非常擅长移动连续的内存块。
尽可能编写最简洁的代码,使用抽象概念清楚地表达您的意图。如果程序运行太慢、使用太多内存、耗电太多或您的最终用户抱怨,那么也许是时候考虑按引用或按值优化了。
但是,我可以向您保证,您在执行速度上看到的任何延迟更有可能是由于您对 IO 的处理,或者是由于选择了具有高时间复杂度的算法。
我的代码中有一个固定大小的多维数组,我需要能够在单独的函数中更改其中的值。我想知道,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
}
或者我需要明确地把它变成参考吗?我担心如果我创建一个返回副本的数组函数,它会太乱而且速度不快。
如果您想避免制作副本,请通过引用(或指针)传递:
void foo (array<array<int,WIDTH>,HEIGHT> &bar);
I want to know, are std::arrays passed as references in a method or is a copy made?
std::array
是值类型。如果按值传递,将(概念上)创建一个副本。
这与 c 风格数组 (int bar[HEIGHT][WIDTH]
) 的行为不同。 C风格的数组通过引用传递。这是由于很久以前 C 语言的一个基本设计决定(有些人会说是错误)。
do I need to explicitly turn it into a reference?
如果你想传递参考,是的。
I fear that if I created an array function that returned a copy, it would be too messy
函数式程序员会争辩说它更干净。
and not as fast.
小心这样的假设。出于其他原因,
a) 编译器并不总是按照你告诉他们的去做。他们可以编写代码,其效果就好像他们已经按照您告诉他们的那样做了,但可以更快地达到相同的结果。 (google: "as-if rule c++")
b) 现代 CPU 架构经过专门设计,非常擅长移动连续的内存块。
尽可能编写最简洁的代码,使用抽象概念清楚地表达您的意图。如果程序运行太慢、使用太多内存、耗电太多或您的最终用户抱怨,那么也许是时候考虑按引用或按值优化了。
但是,我可以向您保证,您在执行速度上看到的任何延迟更有可能是由于您对 IO 的处理,或者是由于选择了具有高时间复杂度的算法。