3 ms·
You only know there are no mutations if Foo itself does not contain any indirections. Additionally, the compiler generally cannot assume that Foo_bar does not m
by david2ndaccount 3y ago
You only know there are no mutations if Foo itself does not contain any indirections. Additionally, the compiler generally cannot assume that Foo_bar does not modify Foo as it is legal to cast away const as long as it is not originally a variable declared as const (so in your static Foo example it would be UB to cast away const).
static + const is valuable, but const parameters are merely a convention, there is no actual enforcement around them and due to aliasing the compiler generally can’t assume the parameter doesn’t actually change anyway.
- lelanthran 3y ago> Additionally, the compiler generally cannot assume that Foo_bar does not modify Foo as it is legal to cast away const No, but it can warn you! The type is meant to capture programmer intention, and if you use `const` the compiler can warn you that your intention does not match the intention of the existing code (like, the intention of the author who wrote Foo_Bar).
- jpcfl 3y agoTrue. I should rephrase to say `const` strongly suggests that a function does not change the observable state of a variable.