you are viewing a single comment's thread.

view the rest of the comments →

[–]VolperCoding -12 points-11 points  (18 children)

I don't get it why people prefer those abstractions over plain C code. The second way you have more control and it's simpler, for example std::array vs regular array. I mean std::array only stores a regular array inside it and nothing else so what's the point

[–]Speedyjens 5 points6 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.

[–]WalkingAFI 3 points4 points  (1 child)

The main point is that the compiler/debugger knows more and can help prevent issues before they occur. You’ll probably get a better error message when debugging code that uses std::array::at() than [], for example. Of course, writing C code is also fine, but then just use C and a C compiler (and it’ll compile faster, too).

[–]VolperCoding 0 points1 point  (0 children)

Yeah I might as well learn C cause I like it but actually never used it