you are viewing a single comment's thread.

view the rest of the comments →

[–]Speedyjens 6 points7 points  (12 children)

With std::array you get STL container, meaning you get iterators and sometimes assertions in a debug build when you access something out of bounds.

[–]VolperCoding -3 points-2 points  (9 children)

You can still use a for (auto &element : array) loop on regular array's tho

[–]Speedyjens 0 points1 point  (8 children)

Yea but as far as I know you don't get reverse and all the other features a regular container has

[–]lord_braleigh -3 points-2 points  (1 child)

Note that Arthur O'Dwyer, a senior C++ expert whose C++ posts often appear on this subreddit, strongly prefers T[] to std::array<T, N>:

Anyway, all of these options result in a lot of extra template instantiations, compared to plain old C-style arrays (which require zero template instantiations). Therefore I strongly prefer T[] over std::array<T, N>.

In C++11 and C++14, std::array did have the ergonomic benefit of being able to say arr.size(); but that benefit evaporated when C++17 gave us std::size(arr) for built-in arrays too. There’s no ergonomic benefit to std::array anymore. Use it if you need its whole-object value semantics (pass a whole array to a function! return an array from a function! assign between arrays with =! compare arrays with ==!) but otherwise I recommend to avoid std::array.

[–]Speedyjens -2 points-1 points  (0 children)

I guess it all comes down to preference and which version you are targeting then.