const数组改变c ++的问题

时间:2010-10-02 19:12:38

标签: c++ const

我有这个代码试图保护用户免受数组边界错误的影响。

我不知道为什么会编译,因为我已经将数组声明为const,因此,我想要得到编译错误!

非常感谢。

/************ file: SafeAccessArray.h ********************/
template<typename T>
class SafeAccessArray
{
private:
int _len;
T * _arr;
public:
SafeAccessArray (int len=2) : _len (len), _arr (new T [len]) {}
~SafeAccessArray () { delete _arr; }
T& operator [](int i) const
{if (i < 0 || i >= _len) throw (-1);
else return _arr[i]; }
};
/************ end of file: SafeAccessArray.h *************/

/************ file: SafeAccessArray1.cpp *************/
#include "SafeAccessArray.h"
int main()`enter code here`
{
SafeAccessArray<int> intArr (2);
intArr[0] = 0;
intArr[1] = 1;
const SafeAccessArray<int> intArrConst (2); // THIS IS THE "PROBLEMATIC" LINE
intArrConst [0] = 0;
intArrConst [1] = 1;
return 0;
}
/************ end of file: SafeAccessArray1.cpp ******/

2 个答案:

答案 0 :(得分:4)

是的const,但无论如何你都T& operator [](int i) const。您正在返回一个引用,并且可以在const对象上调用此函数。

让它返回const T&。更好的是,停下来。只需使用std::vectorat()功能。

答案 1 :(得分:2)

我认为operator[]成员函数需要以下两个重载变体:

T& operator [](int i);
const T& operator [](int i) const;

提供的那个

T& operator [](int i) const;

与上述任何一项都不匹配,因而也存在问题。