| ▲ | dahart 2 hours ago | |
They were saying the problematic philosophy started in C++ 20, not the variable initialization rule. Yes the reason is obvious, but it’s neither simple nor black and white. One huge problem is that this can cause serious performance regressions, and you have to change your code to opt out, e.g. add “[[indeterminate]]”. There are many, many cases in high performance computing where the intended & desired behavior is don’t touch my variables until I fill them. This is changing C++ core principles, there’s a new designation for the state of a variable: erroneous. It’s also subtle and weird, because you can still have well-defined behavior even with erroneous state. It does seem like this might be an experiment though, I don’t think this is the end of the story. (It seems they’re already talking some redesign of this idea.) | ||
| ▲ | mitxela 10 minutes ago | parent | next [-] | |
Uninitialized variables were already UB to read, because some architectures have trap representations, even for integers. Every register on Itanium has one. | ||
| ▲ | ack_complete an hour ago | parent | prev [-] | |
What I'm most annoyed at with the variable initialization change is that:
Which means that libraries are going have to all declare their own macros for [[indeterminate]] and pepper their code with it. | ||