I want to know, are std::arrays passed as references in a method or is a copy made?
std::array is a value type. If you pass by value, a copy will (conceptually) be made.
This is different from the behaviour of a c-style array (int bar[HEIGHT][WIDTH]). c-style arrays are passed by reference. This is due to a fundamental design decision (some would say error) in the C language many moons ago.
do I need to explicitly turn it into a reference?
If you wish to pass a reference, yes.
I fear that if I created an array function that returned a copy, it would be too messy
Functional programmers would argue that it was cleaner.
and not as fast.
Be careful of assumptions like this. For amongst other reasons,
a) Compilers don't always do as you tell them. They can write code that has the same effect as if they'd done what you tell them, but achieves the same result quicker. (google: "as-if rule c++")
b) Modern CPU architectures are specifically engineered to be extremely good at moving contiguous blocks of memory.
Write the cleanest code you can which, using abstract concepts to express your intent clearly. If the program runs too slowly, uses too much memory, uses too much power or your end users are complaining, then maybe is the time to concern yourself with by-reference or by-value optimisations.
However, I can assure you that any delays you are seeing in execution speed are much more likely to be in your treatment of IO or due to the selection of algorithms exhibiting high time complexity.
std::arrayis a regular class that behaves in regular ways. There are no types that get special treatment as parameters.std::arraywas to get away from the special treatment that regular arrays get. Otherwise what's the point?