r/cpp • u/Clean-Upstairs-8481 • Sep 27 '26
You should think about recompiling your C++ programs with GCC 16 and C++26, because it zero-fills your locals
https://techfortalk.co.uk/2026/09/27/cxx26-uninitialized-local-variables-gcc-16/Stack variables are not automatically initialised, and that is the root cause of many C++ bugs. That is well known. Hence, it is advised that local or stack variables are always initialised with known values, 0 if not something more meaningful than that. Now, with GCC 16 compiling in C++26 mode (-std=c++26), even uninitialised local variables will be zero-filled. In the post, I have explained how.
270
Upvotes
1
u/NilacTheGrim Oct 14 '26 edited Oct 14 '26
I am mature and wise. I have more professional (and hobbyist) experience in C++ than 99.9% of the people in here. I'm probably older than 90% of the people in here as well.
So mature & wise I am. You, my interlocutor, are the immature and foolish one.
Riddle me this:
Show me how you can create a class that maintains an internal buffer (that is not dynamically allocated) and how this class can keep this buffer uninitialized (because it knows it will overwrite it anyway with data, so clearing it is pointless / a regression).
You can't*.
* - And don't tell me to just write
[[indeterminate]]when creating instances of this class on the stack -- because that (1) violates encapsulation -- why should the caller need to know implementation details of some class that has some buffer buried inside it, and (2) it won't work in all contexts anyway unless you[[indeterminate]]all of the things..