4 ms·
What 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 j
by Mesopropithecus 8y ago
What 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.