4 ms·
> Many of those are ruled out as modern successors (in my mind, at least), when they continue to make “the billion dollar mistake” (to use its inventor’s own wo
by otabdeveloper2 8y ago
> Many of those are ruled out as modern successors (in my mind, at least), when they continue to make “the billion dollar mistake” (to use its inventor’s own words[1]) of null references.
Well, you're in luck then! You don't even need a 'modern' successor, C++ (even the ancient versions) disallow null references.
- Mesopropithecus 8y agoWhat you mean is that C++ doesn't have a way to (easily) let you check whether a given reference is null or not. int* a = NULL; int& b = *a; compiles and runs just fine.
- masklinn 8y ago> compiles and runs just fine. For fairly low values of those. Creating a null reference is UB, your program is not legal at all.
- jessaustin 8y agoSure, we're not supposed to do that. Sometimes it happens anyway, and the C++ compiler isn't much help in that case.
- coldtea 8y agoIf the compiler still accepts it, then that it belongs to the "UB" class of code is not much comfort. The whole point is to NOT have it be accepted.
- ethan_g 8y agoNo the gp is correct, references in c++ can't be null. Your code invoked undefined behavior before you did anything with a reference, namely *a which is a null pointer dereference.
- the_why_of_y 8y ago> namely *a which is a null pointer dereference. Which is a textbook example of the null reference problem. Edit: There may be some terminological confusion here: when programming language folks talk about "references", they include in that definition what C/C++ call "pointers". See for example the Wikipedia article, which gives as the C++ example not C++ references, but C++ pointers. https://en.wikipedia.org/wiki/Reference_(computer_science) https://en.wikipedia.org/wiki/Reference_(computer_science)
- coldtea 8y ago>Your code invoked undefined behavior before you did anything with a reference Since nobody stopped you, the problem is still there.
- mdpopescu 8y agoThe "null problem" is that a static language does a run-time check instead of a compile-time check. By the time the undefined behavior is invoked, compilation ended.
- masklinn 8y ago> Well, you're in luck then! You don't even need a 'modern' successor, C++ (even the ancient versions) disallow null references. That's useful, until you realise that all its smart pointers are semantically nullable (they can all be empty with the same result as a null raw pointer) and then nothing's actually fixed.