Sometimes it is tempting to let a pointer point to a location that isslightly beyond an array’s index range. For example, consider the followingself-defined array class, which allows you to define arrays whose indexranges do not necessarily start at zero:
template class MyArray { T* ptr; int f, l; public: MyArray (int first, int last) : f(first), l(last) { ptr = new T [last-first+1]; // Why +1? ptr -= first; } T& operator[] (int index) { return ptr[index]; } // Further methods };
The trick is simple and elegant and might result in very efficient code:Since the address stored in ptr differs from theaddress of the real array by the value of first,first need not be subtracted from index inoperator[]. A neat trick, right?
Unfortunately, the C++ standard draft says that a call tooperator[] would result in undefined behavior. Evenif it runs fine on your system, there are definitely systems on whichthis is not the case. An expression with pointer arithmetics is welldefined only if all involved pointers and all results of partialexpressions point to elements of one–and only one–array.
Charlie has over a decade of experience in website administration and technology management. As the site admin, he oversees all technical aspects of running a high-traffic online platform, ensuring optimal performance, security, and user experience.






















