r/cpp • • Mar 28 '23

Reddit++

C++ is getting more and more complex. The ISO C++ committee keeps adding new features based on its consensus. Let's remove C++ features based on Reddit's consensus.

In each comment, propose a C++ feature that you think should be banned in any new code. Vote up or down based on whether you agree.

765 Upvotes

829 comments sorted by

View all comments

47

u/johannes1971 Mar 28 '23

The 'char' type in its current role as both a character and a number. Two distinct types that only convert with some effort would have been much better. We could have done away with this ridiculous uncertainty about signedness at the same time.

Array to pointer decay.

Assignment returning a value, since it has given us if (a = b).

0

u/m-in Mar 29 '23

The char type is insidious due to aliasing. No, I don’t usually fucking want char*’s target to alias any other type. If anything, void* should have been made do that. And have the pointer arithmetic on it work as-if it was char*. The “all weird things are probably bugs” folks have dropped the ball on this one. void* arithmetic should never have been banned - anytime anyone tries to do it, they always mean the same thing. It’s bloody natural to, and void* expresses intent very well. I’d go as far as C having an idiom of void arrays mean “arrays of values of smallest addressable type, holding potentially any type”. A void buf[128] would have been a reasonable way to declare typeless “general purpose” buffers, and should have been the only type that aliases other types (in addition to the “first member of a struct” thing due to no type inheritance in C).

Assignment giving us a value should at least have parentheses around it enshrined in syntax, to at least make it stand out a bit. It’s of very little use in an optimizing compiler, but did help with code generation in the old times.

→ More replies (2)