C++ - 最快的检查数组边界

Div*_*ero 5 c++ arrays

我需要一种非常快速的方法来检查数组的边界.我目前的检查范围是:

template<typename T>
class SmartArray {
    //...
    int size;
    T* array;
    T &operator[](int index) {
        if (index/size!=0)
            throw OUT_OF_RANGE; //#define OUT_OF_RANGE 0x0A
        return array[index];
    }
}
Run Code Online (Sandbox Code Playgroud)

有更快的方法来检查索引是否超出数组边界?

编辑:

我的解决方案是用负面索引制造麻烦.有办法解决这个问题吗?

Lyu*_*lev 5

一般来说,划分是一个缓慢的操作,所以我会避免这种情况.

我认为简单的比较会更有效:

index >= size
Run Code Online (Sandbox Code Playgroud)

但是,这将错过index小于0 的情况,但如果使用unsignedsize_t用于sizeindex变量,则不会出现问题.

所以它变成:

T &operator[](size_t index) {
    if (index >= size)
        throw OUT_OF_RANGE; //#define OUT_OF_RANGE 0x0A
    return array[index];
}
Run Code Online (Sandbox Code Playgroud)


das*_*ght 5

您的检查错过了负值:如果大小为5且索引为-1,则整数除法的结果为零,但索引显然超出范围。

您可以通过使index参数无符号来解决此问题。的类型也size应该如此size_t