Herb Sutter 在 2005年11 月 1 日的 C++ 专栏中写道...
int A[17];
int* endA = A + 17;
for( int* ptr = A; ptr < endA; ptr += 5 )
{
// ...
}
[O] 在某些 CPU 架构中,包括当前的架构,上述代码可能会导致在创建结束后三指针的位置发生硬件陷阱,无论该指针是否被取消引用。
CPU 如何陷入位模式?关于什么 ...
int A[17];
// (i) hardware will trap this ?
int *pUgly = A + 18;
// (ii) hardware will trap this, too?
int *pEnd = A + 17;
++pEnd;
// (iii) will this fool it?
int *precious = A + 17;
unsigned long tricksy = reinterpret_cast<unsigned long>(precious) ;
++tricksy;
int *pHobbits = reinterpret_cast<int *>(tricksy);
额外的问题:“一些当前的 CPU 架构”这个短语是否应该通常理解为仅指运输产品,或者如果描述或暗示它们的虚构作品具有最近的出版日期,它是否也包括虚构的架构?