2 ms·
> Non mutable references don't exist in C. Sure they do: C has a well-defined notion of const-correctness. If you mutate through a `const`, you're invoking und
by woodruffw 4y ago
> Non mutable references don't exist in C.
Sure they do: C has a well-defined notion of const-correctness. If you mutate through a `const`, you're invoking undefined behavior.
Both C and C++ allow you to strip `const` from a const-qualified value or reference, but only under the condition that you don't actually modify that value.
Edit: which, in case it isn't clear, means that Rust's UB is exactly the same as C's in this case.
- anon4242 4y agoActually in C++ you are allowed to strip const and modify the value as long as the original object (not necessarily object in an OO sense) isn't const [1]. [1] https://en.cppreference.com/w/cpp/language/const_cast https://en.cppreference.com/w/cpp/language/const_cast
- woodruffw 4y agoYes: the implication was that the original object was `const`. If you both add and remove const, that's well-defined. (I've yet to see a C or C++ codebase where object provenance actually guarantees this; I've see a lot of C and C++ codebases with const-stripping induced UB.)
- guipsp 4y agoIn rust, stripping const is UB - even if the original location is mut.