【发布时间】:2011-04-23 03:53:49
【问题描述】:
我在类array 中定义了两个版本的重载operator[] 函数。 ptr 是指向 array 对象的第一个元素的指针。
int& array::operator[] (int sub) {
return ptr[sub];
}
和
int array::operator[] (int sub) const {
return ptr[sub];
}
现在,如果我定义一个 const 对象integer1,则只能调用第二个函数.....但是如果我创建一个非常量对象然后调用如下:
cout << "3rd value is" << integer1[2];
这里调用了哪个函数?
【问题讨论】:
-
对于
const对象或访问路径,调用const函数。否则,将调用非常量。array可能不是一个好的类名选择,因为在新的 C++11 标准中有一个std::array模板。 -
只是一个观察。最好从 const 版本返回 const 引用。示例见 std::vector::operator[] 的声明。